先前我发布了一个问题,关于多线程。实际上我的内涵是发送短信,为1000(或更多)的人在同一时间点(例如:12:00尖锐)通过使用c#asp.net 应用程序。那是正确的选择多线程的概念,要实现这一目标?

有帮助吗?

解决方案

这一概念不需要多穿...

这一概念是多个任务经理/Cron的工作

  1. 创建一个ASPX脚本,看到的时间和执行的方法需要你
  2. 设立任务经理到运行这个脚本每二十分钟
  3. 创建方法,提取人的名单,并发送短信,通过短信,称为前。SendSMSFromList(List usersList,string message){}
  4. 现已设置一切,你会运行这一任何时候你需要(只设在ASPX脚本)

请,下降了免费的告诉我,如果你需要任何代码这一点。


编辑 对于具有所有步骤


如果你有一个托管解决方案,在您主持的控制面板你有什么作为 任务计划 你可以设立运行你的脚本,页面上的每一个n分钟,如果是,请通过下一个步骤。如果由另一方面,运行的是你自己的服务器(IIS)然后做这个第一。

  • 安装cUrl for windows 这个位置 和add curl.exe 要C:\WINDOWS
  • 打开任务经理(控制面板>管理工具>任务的调度程序,在windows7资)
  • 创建一个新任务 像这样的
  • 运行命令

卷毛 http://localhost/yourApp/taskManager.aspx

有了这个,你只是配置系统运行一个文件,就像,如果你执行这一链接在一浏览器,这将每15分钟。

现在 我们需要创建的,任务管理器.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 }
}

完成...

我做的一切只是一个文件为例,你应该鸿沟的事情...但是我后是给你的原则。

其他提示

我不知道你是怎么发短信的。但几乎所有大型短信服务提供商都允许您在1秒内发送1000 所以,除非你真的真的真的非常需要立即发送所有内容,我建议你做一个循环,然后将信息发送给服务提供商。

取决于实际发送短信的方式。如果您让我们说一个发送短信的网络服务,您最终会在一次查询1000次,这将无法解决您的问题。

要实现这一目标,您需要确保发送任务可以同时完成。

编辑:结果 此外,我同意,根据你的系统,这些线程数量不会很健康。

EDIT2: 这需要多么尖锐?假设hh:mm就够了,你可以发送60秒 你的约1000短信。这意味着您需要每秒发送aprox 17 SMS。如果你分享 这让我们说4个线程然后你只需要确保你的发送过程/ 设备可以发送4个短信/秒。这应该是可以实现的。

HTH

我不认为这对你有用,并且不建议创建如此大量的线程。

另请参阅此链接

网络中的最大线程数-app

SMS应用程序是否允许发送给多个人?或者可以在各种盒子上使用不同的服务来发送这些短信子集。但我认为一次发送这样的音量很难。

我怀疑你会遇到一些传输问题,在那个时候假设它是一个实时的过程,会把这么多的数据提供给你的SMS提供商。

我找到一个能够进行预定发送的提供商,然后将消息排队,以便在我的闲暇时间在凌晨12点发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top