Question

Auparavant, j'ai posté une question sur le multithreading. En fait, mon intention est d’envoyer des SMS pour 1000 personnes (ou plus) au même moment (par exemple, à 12 h 00 précises) en utilisant les applications c # et asp.net. Est-ce correct de choisir le concept multithreading pour y parvenir?

Était-ce utile?

La solution

Ce concept n’a pas besoin de multi-threading ...

Ce concept est plutôt un travail de gestionnaire de tâches / travail périodique

  1. Créez un script ASPX qui voit l'heure et exécute la méthode dont vous avez besoin
  2. Configurez le Gestionnaire des tâches pour exécuter ce script toutes les xx minutes
  3. Créez une méthode, qui récupère la liste des personnes, envoie le SMS via une API SMS et appelle-la, par exemple. SendSMSFromList (Liste usersList, message de chaîne) {}
  4. Maintenant, configurez tout et vous le lancerez à tout moment (définissez-le simplement dans le script ASPX)

s'il vous plaît, n'hésitez pas à me dire si vous avez besoin de code pour cela.

modifié pour avoir toutes les étapes

Si vous avez une solution hébergée, vous avez dans votre panneau de configuration de l'hébergement quelque chose comme Planification des tâches que vous pouvez configurer pour exécuter votre page de script toutes les n minutes. Si tel est le cas, passez les étapes suivantes. . Si, par ailleurs, vous utilisez votre propre serveur (IIS), faites-le d'abord.

  • Installez cUrl pour Windows à partir de cet emplacement et ajoutez curl.exe vers C: \ WINDOWS
  • Ouvrez le gestionnaire de tâches (Panneau de configuration > Outils d'administration > Planificateur de tâches sous win7)
  • .
  • Créer une nouvelle tâche comme ça
  • Exécutez la commande
  

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

avec cela, vous venez de configurer votre système pour exécuter un fichier, comme si vous exécutiez ce lien dans un navigateur, qui s'exécutera toutes les 15 minutes.

Maintenant , nous devons créer ce fichier 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 }
}

Terminé ...

J'ai tout créé dans un seul fichier pour l'exemple, vous devez diviser les choses ... mais ce que je voulais, c'était vous en montrer le principe.

Autres conseils

Je ne sais pas comment vous leur envoyez des sms. Mais presque tous les grands fournisseurs de services SMS vous permettront d’en envoyer 1 000 en 1 seconde.
Donc, à moins que vous VRAIMENT VRAIMENT VRAIMENT VRAIMENT VRAIMENT ayez besoin de les envoyer tous en même temps, je vous suggère simplement de faire une boucle et d'envoyer les informations au fournisseur de services à la fois.

Dépend de la manière dont les SMS sont réellement envoyés. Si vous avez un service Web qui envoie le SMS, vous finirez par l'interroger 1 000 fois à un moment donné, ce qui ne résoudra pas votre problème.

Pour ce faire, vous devez vous assurer que la tâche d'envoi peut être effectuée simultanément.

EDIT:
De plus, je suis d’accord pour dire que cette quantité de threads ne sera pas saine pour votre système.

Edit2: À quel point cela doit-il être net? En supposant que hh: mm est suffisant, vous auriez 60 pour envoyer votre environ 1000 sms. Cela signifie que vous devez envoyer environ 17 SMS par seconde. Si vous partagez cela permet de dire 4 threads alors vous devez seulement vous assurer que votre processus d'envoi / L'appareil peut envoyer 4 SMS / s. cela devrait être réalisable, je suppose.

HTH

Je ne pense pas que cela va fonctionner pour vous, et la création d'un si grand nombre de threads n'est pas conseillée.

Voir aussi ce lien

nombre-maximal-de-threads-dans-a-net -app

L’application SMS permet-elle d’envoyer à plusieurs? Ou peut-être utiliser différents services sur différentes boîtes pour envoyer ce sous-ensemble de SMS. Mais je pense qu’envoyer un tel volume à la fois sera difficile.

Je suppose que vous rencontrez des problèmes de transport, car votre serveur SMS reçoit exactement ce volume de données, à supposer qu'il s'agisse d'un processus en temps réel.

Je trouvais un fournisseur capable d'effectuer des envois programmés, puis je mettais les messages à envoyer à midi, à ma guise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top