1

Comet (AJAX Push) を使用して個々のユーザーに通知を送信するアプリケーションを構築しようとしています。ほとんどの通知のタイムアウトはかなり短くなります。

RabbitMQ を実行しているので、AMQP を介してメッセージを送信するのが最も簡単です。Comet サーバーとキュー サーバーの両方が簡単に機能するように、個々のユーザーに対処する最善の方法は何かを考えています。

Carrotを Orbited、Tornadoなどで使用するなど、多くのソリューションを検討しました 。

comet サーバーがすべてのユーザーに対して 1 つのコンシューマー (キューを使用) を登録する場合、これらのコンシューマーはタイムアウト付きで保持するか、使用するたびに破棄する必要があります。どちらのソリューションもあまり有望ではないようです。Tornado/Carrot では、次のようなことが可能になると思います。

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        user_id = 123

        consumer = Consumer(connection=conn, queue="feed", exchange="feed", routing_key=user_id)
        consumer.register_callback(self.message_received)
        consumer.wait()

    def message_received(self, message_data, message):
        self.write(simplejson.dumps(message_data))
        message.ack()
        consumer.close()

        self.finish()

または、comet サーバーはキューのコンシューマーを 1 つだけ持つことができ、ユーザーが接続して使用するまで着信通知をキャッシュできる独自の軽量メッセージ キューを実装する必要があります。これは memcached が適しているように思えますが、私は経験がありません。

ここで最善のアプローチは何でしょうか?

4

1 に答える 1

0

私はほとんど同じユースケースを持っていて、最終的にはクライアント側にSocket.IO 、接続を処理するためにTornadIO 、メッセージパッシングに RabbitMQ ( pika経由) を使用することになりました。非常にうまく機能します。試してみる価値があります。

于 2011-11-17T21:49:50.713 に答える