문제

이전에는 멀티 스레딩에 관한 질문을 게시했습니다. 실제로 내 강도는 C# 및 ASP.NET 응용 프로그램을 사용하여 같은 시점 (예 : 오전 12시 날)에 1000 명 (또는 그 이상)의 SMS를 보내는 것입니다. 이것을 달성하기 위해 멀티 스레딩 개념을 선택해도 괜찮습니까?

도움이 되었습니까?

해결책

그 개념은 멀티 스레딩이 필요하지 않습니다 ...

그 개념은 작업 관리자 / Cron 작업에 더 가깝습니다.

  1. 시간을보고 필요한 메소드를 실행하는 ASPX 스크립트를 작성하십시오.
  2. xx 분 마다이 스크립트를 실행할 작업 관리자를 설정하십시오.
  3. 사람 목록을 가져오고 SMS API를 통해 SMS를 보내는 방법을 만들고 Ex를 위해 호출하십시오. sendsmsfromlist (list userlist, string message) {}
  4. 이제 모든 것을 설정하면 필요할 때 언제든지 실행할 수 있습니다 (ASPX 스크립트로 설정하십시오).

이에 대한 코드가 필요한 경우 무료로 말해주십시오.


편집 모든 단계가 있습니다


호스팅 된 솔루션이있는 경우 호스팅 제어판에 무언가가 있습니다. 작업 일정 N 분마다 스크립트 페이지를 실행하도록 설정할 수 있습니다. 그렇다면 다음 단계를 통과하십시오. 다른 한편으로, 당신이 당신의 자신의 서버 (II)를 실행한다면 먼저 이것을 수행하십시오.

  • Windows의 Curl을 설치하십시오 이 위치 그리고 추가 curl.exe C : Windows에
  • Open Task Manager (제어판> 관리 도구> Win7의 작업 스케줄러)
  • 새로운 작업을 만듭니다 이와 같이
  • 명령을 실행하십시오

곱슬 곱슬하다 http : //localhost/yourapp/taskmanager.aspx

이를 통해 브라우저에서 해당 링크를 실행하는 것처럼 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

나는 그것이 당신을 위해 효과가 있다고 생각하지 않으며, 그러한 많은 스레드를 만드는 것은 권장되지 않습니다.

또한이 링크를 참조하십시오

Net-App의 최대 내버

SMS 애플리케이션이 전송을 허용합니까? 또는 다양한 상자에 다른 서비스를 사용하여 이러한 SMS의 하위 집합을 보내십시오. 그러나 한 번에 그러한 책을 보내는 것은 어려울 것이라고 생각합니다.

그 당시에는 실시간 프로세스라고 가정하고 SMS 제공 업체에 많은 데이터를 얻는 전송 문제가있을 것 같습니다.

예정된 전송을 할 수있는 제공자를 찾은 다음 여가 시간에 오전 12시에 보내기 위해 메시지를 대기시켜줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top