같은 시점에서 SMS를 보냅니다
-
05-07-2019 - |
문제
이전에는 멀티 스레딩에 관한 질문을 게시했습니다. 실제로 내 강도는 C# 및 ASP.NET 응용 프로그램을 사용하여 같은 시점 (예 : 오전 12시 날)에 1000 명 (또는 그 이상)의 SMS를 보내는 것입니다. 이것을 달성하기 위해 멀티 스레딩 개념을 선택해도 괜찮습니까?
해결책
그 개념은 멀티 스레딩이 필요하지 않습니다 ...
그 개념은 작업 관리자 / Cron 작업에 더 가깝습니다.
- 시간을보고 필요한 메소드를 실행하는 ASPX 스크립트를 작성하십시오.
- xx 분 마다이 스크립트를 실행할 작업 관리자를 설정하십시오.
- 사람 목록을 가져오고 SMS API를 통해 SMS를 보내는 방법을 만들고 Ex를 위해 호출하십시오. sendsmsfromlist (list userlist, string message) {}
- 이제 모든 것을 설정하면 필요할 때 언제든지 실행할 수 있습니다 (ASPX 스크립트로 설정하십시오).
이에 대한 코드가 필요한 경우 무료로 말해주십시오.
편집 모든 단계가 있습니다
호스팅 된 솔루션이있는 경우 호스팅 제어판에 무언가가 있습니다. 작업 일정 N 분마다 스크립트 페이지를 실행하도록 설정할 수 있습니다. 그렇다면 다음 단계를 통과하십시오. 다른 한편으로, 당신이 당신의 자신의 서버 (II)를 실행한다면 먼저 이것을 수행하십시오.
- Windows의 Curl을 설치하십시오 이 위치 그리고 추가 curl.exe C : Windows에
- Open Task Manager (제어판> 관리 도구> Win7의 작업 스케줄러)
- 새로운 작업을 만듭니다 이와 같이
- 명령을 실행하십시오
이를 통해 브라우저에서 해당 링크를 실행하는 것처럼 15 분마다 실행되는 것처럼 파일을 실행하도록 시스템을 구성했습니다.
지금 해당 TaskManager.aspx 파일을 만들어야합니다
public partial class taskManager : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
// Run after midnight
if (dt.Hour == 0 && dt.Minute <= 15)
{
Write2Log("Schedule Job Started", LogType.INFO);
SendSMSFromList(
GetUsersList(),
GetSMSMessage());
Write2Log("Schedule Job Finished", LogType.INFO);
}
}
private string GetSMSMessage()
{
// Fetch the text from DB...
return "This is the message content that I will send as SMS";
}
private List<string> GetUsersList()
{
// fetch the list form DB...
return new List<string>();
}
private void SendSMSFromList(List<string> usersList, string message)
{
// send SMS's
foreach (string phoneNr in usersList)
{
// send message
mySMSAPI.Send(phoneNr, message);
}
}
private void Write2Log(string text, LogType type)
{
// Log to a file what's going on...
try
{
string filename = HttpContext.Current.Server.MapPath("") + "\\status.log";
using (StreamWriter sw = new StreamWriter(filename, true)) // open to append
{
// example: 2008-12-17 13:53:10,462 INFO - Schedule Job Finished
string write = String.Format("{0} {1} - {2}",
DateTime.Now,
type.ToString(),
text);
sw.WriteLine(write);
}
}
catch (Exception)
{ }
}
private enum LogType
{ INFO, WARNING, ERROR }
}
완료...
나는 예제를 위해 하나의 파일로 모든 것을 만들었습니다. 당신은 사물을 나누어야합니다 ... 그러나 내가 그랬던 것은 당신에게 그것의 원리를 보여주는 것이 었습니다.
다른 팁
나는 당신이 그들에게 SMS를 보내는 방법을 모른다. 그러나 거의 모든 대형 SMS 서비스 제공 업체를 사용하면 1 초 이내에 1000을 보낼 수 있습니다.
당신이 아니라면 정말 정말 정말 정말 정말 한 번에 모두 보내야합니다. 루프를 만들고 정보를 서비스 제공 업체에게 보내는 것이 좋습니다.
SMS가 실제로 전송되는 방식에 따라 다릅니다. SMS를 보내는 웹 서비스가 있다고 가정하면 한 시점에서 SMS를 1000 번 쿼리하여 문제를 해결하지 못합니다.
이를 달성하려면 전송 작업을 동시에 수행 할 수 있는지 확인해야합니다.
편집하다:
또한 나는 그 금액의 스레드가 시스템에 전혀 건강하지 않다는 것에 동의합니다.
edit2 : 이것은 얼마나 예리해야합니까? HH : MM이 충분하다고 가정하면 약 1000 SMS를 보내기 위해 60 대가 있다고 가정합니다. 즉, 초당 APROX 17 SMS를 보내야합니다. 4 개의 스레드라고 말하면 이것을 공유하면 전송 프로세스 / 장치가 4 개의 SMS / S를 보낼 수 있는지 확인하면됩니다. 이것은 내가 추측 할 수 있어야합니다.
HTH
나는 그것이 당신을 위해 효과가 있다고 생각하지 않으며, 그러한 많은 스레드를 만드는 것은 권장되지 않습니다.
또한이 링크를 참조하십시오
SMS 애플리케이션이 전송을 허용합니까? 또는 다양한 상자에 다른 서비스를 사용하여 이러한 SMS의 하위 집합을 보내십시오. 그러나 한 번에 그러한 책을 보내는 것은 어려울 것이라고 생각합니다.
그 당시에는 실시간 프로세스라고 가정하고 SMS 제공 업체에 많은 데이터를 얻는 전송 문제가있을 것 같습니다.
예정된 전송을 할 수있는 제공자를 찾은 다음 여가 시간에 오전 12시에 보내기 위해 메시지를 대기시켜줍니다.