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?
PHP中文网
PHP中文网 2017-05-16 17:06:59
0
3
653

Ç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中文网

认证高级PHP讲师

répondre à tous(3)
世界只因有你

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.

洪涛

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.

某草草

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal