Maison > Questions et réponses > le corps du texte
用户在领券页面点击领取后,调用后台服务接口A,接口A将该领取操作写入队列:
// 写入队列
addQue(....)
然后呢,写入队列后紧接着循环读取队列吗?用户还在那等着是否领取成功的结果。
曾经蜡笔没有小新2017-04-28 09:06:36
https://redis.io/topics/pubsub
Redis prend en charge la publication/l'abonnement
某草草2017-04-28 09:06:36
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.
过去多啦不再A梦2017-04-28 09:06:36
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)
高洛峰2017-04-28 09:06:36
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.