Отправьте SMS в одно и то же время - PullRequest
2 голосов
/ 22 октября 2009

Ранее я публиковал вопрос по многопоточности. На самом деле я намереваюсь отправить SMS для 1000 (или более) человек одновременно (например, ровно в 12:00), используя c # и приложение asp.net. Можно ли выбрать концепцию многопоточности для достижения этой цели?

Ответы [ 5 ]

6 голосов
/ 22 октября 2009

Эта концепция не требует многопоточности ...

Эта концепция больше похожа на Task Manager / Cron Job

  1. Создайте сценарий ASPX, который видит время и выполняет необходимый метод
  2. Настройка диспетчера задач для запуска этого скрипта каждые хх минут
  3. Создайте метод, который выбирает список людей и отправляет SMS через SMS API, и вызывает его, например, SendSMSFromList (список usersList, строковое сообщение) {}
  4. Теперь настройте все и вы запустите это в любое время (просто установите это в скрипте ASPX)

пожалуйста, не стесняйтесь, сообщите мне, если вам нужен какой-либо код для этого.


отредактировано для выполнения всех шагов


Если у вас есть размещенное решение, в панели управления хостингом у вас есть что-то вроде Расписание задач , которое вы можете настроить для запуска своей страницы скрипта каждые n минут, если так, пожалуйста, пропустите следующие шаги. Если, с другой стороны, вы используете свой собственный сервер (IIS), сделайте это сначала.

  • Установите cUrl для Windows из этого местоположения и добавьте curl.exe в C: \ WINDOWS
  • Открыть диспетчер задач (Панель управления> Администрирование> Планировщик задач на 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 }
}

Готово ...

Я сделал все в одном файле ради примера, вы должны разделить вещи ... но я хотел показать вам принцип этого.

2 голосов
/ 22 октября 2009

Зависит от того, как на самом деле отправляются SMS. Если у вас есть, скажем, веб-служба, которая отправляет SMS, вы в конечном итоге 1000 раз запросите его, что не решит вашу проблему.

Для этого вам нужно убедиться, что задача отправки может быть выполнена одновременно.

EDIT:
Кроме того, я согласен с тем, что такое количество потоков не будет работать для вашей системы вообще.

Edit2: Насколько острым это должно быть? Предполагая, что hh: mm достаточно, у вас есть 60-е, чтобы отправить ваши около 1000 смс. Это означает, что вам нужно отправить примерно 17 SMS в секунду. Если вы поделитесь это позволяет сказать 4 потока, тогда вам нужно только убедиться, что ваш процесс отправки / Устройство может отправить 4 SMS / с. это должно быть достижимо, я думаю.

НТН

2 голосов
/ 22 октября 2009

Я не знаю, как вы отправляете им смс. Но почти все крупные поставщики SMS-услуг позволят вам отправить 1000 в течение 1 секунды.
Поэтому, если вам ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО необходимо отправить их все сразу, я предлагаю вам просто сделать цикл и отправить информацию поставщику услуг по одному за раз.

1 голос
/ 22 октября 2009

Я не думаю, что это сработает для вас, и создание такого большого количества потоков не рекомендуется.

Также смотрите эту ссылку

максимальное-число-нитей-в-сети-приложение

Разрешает ли приложение SMS отправлять многим? Или может использовать разные сервисы на разных ящиках для отправки этих подмножеств смс. Но я думаю, что отправка такого объема сразу будет затруднена.

0 голосов
/ 19 июля 2010

Я подозреваю, что у вас возникнут некоторые проблемы с передачей такого большого количества данных вашему поставщику SMS-сообщений именно в это время, если предположить, что это процесс в реальном времени.

Я бы нашел поставщика, способного выполнять запланированные отправки, а затем поставить в очередь сообщения для отправки в 12:00 на досуге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...