Pregunta

Anteriormente publiqué una pregunta relacionada con multithreading. En realidad, mi intención es enviar SMS para 1000 (o más) personas en el mismo momento (Ej: 12:00 AM sharp) mediante el uso de c # y la aplicación asp.net. ¿Está bien elegir el concepto de multihilo para lograr esto?

¿Fue útil?

Solución

Ese concepto no necesita subprocesos múltiples ...

Ese concepto es más bien un Administrador de tareas / Tarea Cron

  1. Cree un script ASPX que vea la hora y ejecute el método que necesita
  2. Configure el Administrador de tareas para ejecutar este script cada xx minutos
  3. Cree un método, que recupere la lista de personas y envíe el SMS a través de una API de SMS, y llámelo, por ej. SendSMSFromList (enumerar lista de usuarios, mensaje de cadena) {}
  4. Ahora configúrelo todo y lo ejecutará cuando lo necesite (solo configúrelo en el script ASPX)

por favor, no dudes en decirme, si necesitas algún código para esto.


editado para tener todos los pasos


Si tiene una solución alojada, en su panel de control de hosting tiene algo como Programación de tareas que puede configurar para ejecutar la página de su script cada n minutos, si es así, apruebe los siguientes pasos. . Si, por otro lado, está ejecutando su propio servidor (IIS), haga esto primero.

  • Instale cUrl para Windows desde esta ubicación y añada curl.exe a C: \ WINDOWS
  • Abra el Administrador de tareas (Panel de control > Herramientas administrativas > Programador de tareas en win7)
  • Cree una nueva tarea como esta
  • Ejecuta el comando
  

curl http: //localhost/yourApp/taskManager.aspx

con esto, acaba de configurar su sistema para ejecutar un archivo, como si ejecutara ese enlace en un navegador, se ejecutará cada 15 minutos.

Ahora necesitamos crear ese archivo 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 }
}

Hecho ...

Hice todo en un solo archivo por el ejemplo, debes dividir las cosas ... pero lo que buscaba era mostrarte el principio.

Otros consejos

No sé cómo les envías sms. Pero casi todos los proveedores de servicios de sms grandes le permitirán enviar 1000 en 1 segundo.
Por lo tanto, a menos que REALMENTE REALMENTE REALMENTE REALMENTE REALMENTE deba enviarlos todos a la vez, le sugiero que haga un bucle y envíe la información al proveedor del servicio una por vez.

Depende de cómo se envían realmente los SMS. Si tiene un servicio web que envía el SMS, terminará por consultarlo 1000 veces en un punto que no resolverá su problema.

Para lograr esto, debe asegurarse de que la tarea de envío se pueda realizar simultáneamente.

EDITAR:
Además, estoy de acuerdo en afirmar que esa cantidad de subprocesos no será saludable para su sistema en absoluto.

Edit2: ¿Qué tan preciso debe ser esto? Suponiendo que hh: mm es suficiente tendrías 60 para enviar tus unos 1000 sms. Esto significa que necesita enviar aproximadamente 17 SMS por segundo. Si compartes Esto le permite decir 4 hilos, entonces solo tendría que asegurarse de que su proceso de envío / El dispositivo puede enviar 4 SMS / s. esto debería ser factible, supongo.

HTH

No creo que vaya a funcionar para usted, y no se recomienda crear una cantidad tan grande de subprocesos.

También, vea este enlace

maximum-number-of-threads-in-a-net -app

¿La aplicación de SMS permite enviar a muchos? O tal vez use diferentes servicios en varias cajas para enviar estos subconjuntos de sms. Pero creo que enviar ese volumen a la vez será difícil.

Sospecho que tendrá algunos problemas de transporte al enviar esa cantidad de datos a su proveedor de SMS exactamente en ese momento, suponiendo que se trata de un proceso en tiempo real.

Me gustaría encontrar un proveedor capaz de hacer envíos programados y luego poner en cola los mensajes para enviarlos a las 12AM en mi tiempo libre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top