用户在领券页面点击领取后,调用后台服务接口A,接口A将该领取操作写入队列:
// 写入队列
addQue(....)
然后呢,写入队列后紧接着循环读取队列吗?用户还在那等着是否领取成功的结果。
某草草2017-04-28 09:06:36
私が知っているのは、最終結果を得るには、クーポン収集の成功ページでアンケートを実行する (または、より良いエクスペリエンスを得るために Redis pubsub で WebSocket を使用する) ことです。
过去多啦不再A梦2017-04-28 09:06:36
製品要件は同期的 (結果は同期的に返されます) であり、キューは主に注文、通知などの非同期実装を実現するために使用されます。
本当にキューを使用して同期結果をシミュレートしたい場合は、クーポン結果を個別に取得することしかできません。
「Redis はパブリッシュ/サブスクライブをサポートしています」: このモデルの使用にはいくつかの問題があります
定義する必要があるチャネルが多すぎるため、1 つのチャネルを再利用すると、加入者は多くのメッセージをフィルタリングする必要があり、テキスト プロトコルが必要になります (パブリッシュはテキストのみをサポートします)。
高洛峰2017-04-28 09:06:36
それが非同期であり、コレクション結果がコレクションリクエストを通じて返されない場合、上記のように ajax を使用してコレクション結果を取得すると、ループ内でリクエストを開始するのに ajax は必要ありません。これは、いつ発生するかわからないためです。ポーリングが関与する限り、ポーリング間隔が短すぎると、サーバーに大きな負荷がかかります。ポーリング間隔が長すぎると、問題が発生します。結果の通知と受け取りが遅れる。
同期を行いたくない場合は、WebSocket を使用すると、両者がいつでも遅延なく通信し、データを交換できます。
または、SSE (サーバー送信イベント) を使用して直接プッシュします。WebSocket は双方向であり、SSE は一方向であり、メッセージのプッシュにはこれで十分です。
SSEリンクSSE
サーバーの内部動作プロセスに関しては、途中にキャッシュやmqの層を追加すれば、非同期動作を実現できます。たとえば、zmq、redis pub/sub などです。