Domanda

In precedenza avevo pubblicato una domanda relativa al multithreading. In realtà la mia intenzione è quella di inviare SMS per 1000 (o più) persone contemporaneamente (es: 12:00 in punto) usando l'applicazione c # e asp.net. Va bene scegliere il concetto di multithreading per raggiungere questo obiettivo?

È stato utile?

Soluzione

Questo concetto non richiede il multi threading ...

Questo concetto è più un Task Manager / Cron Job

  1. Crea uno script ASPX che vede l'ora ed esegue il metodo che ti serve
  2. Imposta Task Manager per eseguire questo script ogni xx minuti
  3. Crea un metodo che recupera l'elenco di persone e invia l'SMS tramite un'API SMS e chiamalo, ad es. SendSMSFromList (Elenco UsersList, messaggio stringa) {}
  4. Ora imposta tutto e lo eseguirai in qualsiasi momento (basta impostarlo nello script ASPX)

per favore, non esitare a dirmelo, se hai bisogno di un codice per questo.


modificato per avere tutti i passaggi


Se hai una soluzione ospitata, nel tuo pannello di controllo dell'hosting hai qualcosa come Pianificazione attività che puoi impostare per eseguire la tua pagina di script ogni n minuti, in tal caso passa i passaggi successivi . Se invece stai eseguendo il tuo server (IIS), fallo prima.

  • Installa cUrl per Windows da questa posizione e aggiungi curl.exe in C: \ WINDOWS
  • Apri Task Manager (Pannello di controllo > Strumenti di amministrazione > Task Scheduler su win7)
  • Crea una nuova attività in questo modo
  • Esegui il comando
  

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

con questo hai appena configurato il tuo sistema per eseguire un file, proprio come se eseguissi quel collegamento in un browser, che verrà eseguito ogni 15 minuti.

Ora dobbiamo creare quel file 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 }
}

Fatto ...

Ho fatto tutto in un solo file per l'esempio, dovresti dividere le cose ... ma quello che stavo cercando di mostrarti il ??principio di esso.

Altri suggerimenti

Non so come si inviano loro sms. Ma quasi tutti i grandi fornitori di servizi sms ti permetteranno di inviare 1000 entro 1 secondo.
Quindi, a meno che tu non abbia bisogno di VERAMENTE VERAMENTE REALMENTE VERAMENTE REALMENTE VERAMENTE inviarli tutti in una volta, ti suggerisco di fare un ciclo e inviare le informazioni al fornitore del servizio una alla volta.

Dipende da come vengono effettivamente inviati gli SMS. Se hai un servizio web che invia l'SMS finirai per interrogarlo 1000 volte in un punto che non risolverà il tuo problema.

Per raggiungere questo obiettivo è necessario assicurarsi che l'attività di invio possa essere eseguita contemporaneamente.

EDIT:
Inoltre, sono d'accordo nel dire che quella quantità di thread non sarà affatto salutare per il tuo sistema.

Edit2: Quanto deve essere nitido? Supponendo che hh: mm sia sufficiente, avresti 60 anni da inviare i tuoi circa 1000 sms. Ciò significa che devi inviare circa 17 SMS al secondo. Se condividi questo per dire 4 thread quindi dovrai solo assicurarti che il tuo processo di invio / il dispositivo può inviare 4 SMS / s. questo dovrebbe essere realizzabile immagino.

HTH

Non credo che funzionerà per te e non è consigliabile creare un numero così elevato di thread.

Vedi anche questo link

numero massimo di thread-in-a-net -app

L'applicazione SMS consente l'invio a molti? O forse utilizzare servizi diversi su varie caselle per inviare questo sottoinsieme di sms. Ma penso che inviare un tale volume in una volta sarà difficile.

Ho il sospetto che tu abbia dei problemi di trasporto nel trasferire così tanti dati al tuo provider SMS esattamente nel momento in cui si presume che sia un processo in tempo reale.

Troverei un provider in grado di eseguire invii programmati e quindi mettere in coda i messaggi da inviare alle 12 del mattino a mio piacimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top