Maison  >  Questions et réponses  >  le corps du texte

nginx - Comment faire en sorte que le serveur informe de manière proactive le client socket après avoir reçu des données http?

Ça y est, je veux faire fonctionner une ampoule intelligente. C'est ainsi que je le fais actuellement. Je l'utilise sur la page Web, puis je soumets les données et les enregistre dans la base de données via http. et se connecte au serveur. Le serveur extrait les données de la base de données vers le client dans une boucle sans fin et se met en veille après chaque opération. S'il y a beaucoup de clients, par exemple 100 000, je dois interroger la base de données 100 000 fois par seconde. je veux donc l'améliorer. Une fois que le serveur a reçu les données http, elles sont immédiatement transmises au client et il n'est pas nécessaire de les enregistrer dans la base de données.

PHP中文网PHP中文网2713 Il y a quelques jours596

répondre à tous(3)je répondrai

  • 世界只因有你

    世界只因有你2017-05-16 17:08:59

    essayez ou essayez « websocket »
    De plus, il n'est pas recommandé d'utiliser la base de données à chaque fois que vous interrogez. Vous pouvez le lire et le mettre dans le cache, et le lire directement depuis le cache pour chaque requête. Ensuite, un autre processus surveille la modification de la valeur et met à jour le cache tout en modifiant la base de données.

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-16 17:08:59

    Vous pouvez considérer la base de données redis en mémoire, puis la conserver régulièrement, c'est-à-dire la sauvegarder sur le disque.

    répondre
    0
  • 某草草

    某草草2017-05-16 17:08:59

    Il y a beaucoup de clients, pourquoi faut-il le lire 100 000 fois ? Le client et le serveur sont connectés en permanence, et un mapping est stocké dans la mémoire du serveur :

    map[client_id] = socket_fd
    

    http est soumis et enregistré dans la base de données, et le serveur lit les informations de la base de données dans une boucle sans fin. S'il est envoyé à un client, le message doit contenir l'identifiant client du client. Recherchez le socket_fd sur la carte et envoyez le message. il est diffusé à Tous les clients peuvent simplement parcourir la carte et l'envoyer. Le nombre de fois que la base de données est lue est uniquement lié au nombre de messages et non au nombre de clients.

    La base de données mentionnée ci-dessus peut être implémentée à l'aide de files d'attente de messages telles que redis ou nsq. Le serveur peut ouvrir plusieurs threads ou coroutines pour un traitement simultané s'il est stocké dans la base de données, il peut directement récupérer les données et les envoyer si vous le souhaitez. service Si le terminal plante, les données ne seront-elles pas perdues ? La fiabilité ne peut être garantie.

    répondre
    0
  • Annulerrépondre