Ce que je sais, c'est faire un sondage sur la page de réussite de la collecte des coupons (ou websocket avec redis pubsub pour une meilleure expérience) pour obtenir le résultat final.
Les exigences du produit sont synchrones (les résultats sont renvoyés de manière synchrone) et la file d'attente est principalement utilisée pour réaliser une implémentation asynchrone, telle que des commandes, des notifications, etc. Si vous souhaitez vraiment utiliser une file d'attente pour simuler les résultats de synchronisation, vous ne pouvez obtenir les résultats du coupon que séparément.
"Redis prend en charge la publication/l'abonnement" : il y a quelques problèmes avec l'utilisation de ce mode
Il y a trop de chaînes à définir. Si une chaîne est réutilisée, les abonnés devront filtrer beaucoup de messages et un protocole de texte est requis (la publication ne prend en charge que le texte)
Après avoir soumis une demande au service, s'il raccroche avant de recevoir une réponse, les informations du coupon seront perdues
Les suggestions sont les suivantes :
Le meilleur moyen est de modifier la requête asynchrone en requête synchrone
Sinon, vous pouvez envisager de mettre le résultat du traitement de la requête dans un hash (id-> result)
S'il est asynchrone et que le résultat de la collecte n'est pas renvoyé via la demande de collecte, si vous utilisez ajax comme mentionné ci-dessus pour obtenir le résultat de la collecte, il n'est pas nécessaire que ajax lance la demande en boucle, car vous ne savez pas lorsque le résultat de la collecte sera publié, vous ne pourrez le faire que tant que l'interrogation sera impliquée, des problèmes surviendront. Si l'intervalle d'interrogation est trop court, le serveur sera soumis à une forte pression. Si l'intervalle d'interrogation est long, il y aura un retard. dans la notification et la réception des résultats.
Si vous ne souhaitez pas effectuer de synchronisation, vous pouvez utiliser websocket. Les deux parties peuvent communiquer et échanger des données à tout moment et sans délai. Ou utilisez SSE (Server-sent Events) pour envoyer directement des messages. WebSocket est bidirectionnel et SSE est unidirectionnel, ce qui est suffisant pour envoyer des messages.
服务器推送事件(Server-sent Events),简称SSE,是 HTML 5 规范中的一个组成部分,可以用来从服务端实时推送数据到浏览器端。相对于与之类似的 COMET 和 WebSocket 技术来说,服务器推送事件的使用更简单,对服务器端的改动也比较小。对于某些类型的应用来说,服务器推送事件是最佳的选择。
Lien SSESSE
En ce qui concerne le processus de fonctionnement interne du serveur, il existe de nombreuses options. Tant qu'une couche de cache ou de mq est ajoutée au milieu, un fonctionnement asynchrone peut être réalisé. Par exemple, zmq, redis pub/sub, etc.
https://redis.io/topics/pubsub
Redis prend en charge la publication/l'abonnement
Ce que je sais, c'est faire un sondage sur la page de réussite de la collecte des coupons (ou websocket avec redis pubsub pour une meilleure expérience) pour obtenir le résultat final.
Les exigences du produit sont synchrones (les résultats sont renvoyés de manière synchrone) et la file d'attente est principalement utilisée pour réaliser une implémentation asynchrone, telle que des commandes, des notifications, etc.
Si vous souhaitez vraiment utiliser une file d'attente pour simuler les résultats de synchronisation, vous ne pouvez obtenir les résultats du coupon que séparément.
"Redis prend en charge la publication/l'abonnement" : il y a quelques problèmes avec l'utilisation de ce mode
Il y a trop de chaînes à définir. Si une chaîne est réutilisée, les abonnés devront filtrer beaucoup de messages et un protocole de texte est requis (la publication ne prend en charge que le texte)
Après avoir soumis une demande au service, s'il raccroche avant de recevoir une réponse, les informations du coupon seront perdues
Les suggestions sont les suivantes :
Le meilleur moyen est de modifier la requête asynchrone en requête synchrone
Sinon, vous pouvez envisager de mettre le résultat du traitement de la requête dans un hash (id-> result)
S'il est asynchrone et que le résultat de la collecte n'est pas renvoyé via la demande de collecte, si vous utilisez ajax comme mentionné ci-dessus pour obtenir le résultat de la collecte, il n'est pas nécessaire que ajax lance la demande en boucle, car vous ne savez pas lorsque le résultat de la collecte sera publié, vous ne pourrez le faire que tant que l'interrogation sera impliquée, des problèmes surviendront. Si l'intervalle d'interrogation est trop court, le serveur sera soumis à une forte pression. Si l'intervalle d'interrogation est long, il y aura un retard. dans la notification et la réception des résultats.
Si vous ne souhaitez pas effectuer de synchronisation, vous pouvez utiliser websocket. Les deux parties peuvent communiquer et échanger des données à tout moment et sans délai.
Ou utilisez SSE (Server-sent Events) pour envoyer directement des messages. WebSocket est bidirectionnel et SSE est unidirectionnel, ce qui est suffisant pour envoyer des messages.
Lien SSESSE
En ce qui concerne le processus de fonctionnement interne du serveur, il existe de nombreuses options. Tant qu'une couche de cache ou de mq est ajoutée au milieu, un fonctionnement asynchrone peut être réalisé. Par exemple, zmq, redis pub/sub, etc.
Recherche de connaissances. . . .