0

私はチャットサーバーを持っています。クライアントがサブスクライブした後、DB を調べて、サブスクライブしたチャット ルームの履歴があるかどうかを確認します。

問題は、「return callback(message);」を実行する必要がある拡張機能で「subscribe」イベントしかキャッチできないことです。メッセージを返します。ここで履歴を実行すると、クライアントが実際にサブスクライブされていないため、クライアントに何も公開されません。

クライアントの準備が整ったことを知る方法はありますか? または、サブスクリプションが成功したときに発生するイベントはありますか?

ありがとう!

4

1 に答える 1

2

サブスクリプションを作成した後、サブスクライブが成功した場合とサブスクライブに失敗した場合に別のコールバックをアタッチできます。

var http = require('http');
var faye = require('faye');

var faye_server = new faye.NodeAdapter({mount: '/faye', timeout: 120});

faye_server.listen(8089);

var subscription = faye_server.getClient().subscribe('/testing', function(message){console.log(message);});

subscription.callback(function(){console.log('Subscription successful and ready to use!');});

subscription.errback(function(){console.log('ERROR: Subscription failed!');});

少し埋もれていますが、これはfayeのメインページに記載されています。. . http://faye.jcoglan.com/browser/subscribing.html

これは、私がテストしたように、ノード サーバー、ノード クライアント、またはブラウザー クライアントで動作します。

さらに、クライアントが稼働していることを確認するために私が行っていることは次のとおりです。クライアントを作成し、ガベージ チャネル名にサブスクライブしてみます。そのサブスクリプションが起動、失敗、またはタイムアウトになると (5 秒のタイムアウトを入れます)、それをクライアントのオープン成功と見なします。これは少しラウンド アバウトなメソッドですが、私にとっては非常にうまく機能しており、faye は前の例のようにコールバックとエラーバックを使用することでかなりきれいにしています。

クライアント側ではこれですべてですが、サーバー側ではさらに簡単になります: http://faye.jcoglan.com/node/monitoring.html . ここで拡張機能を使用して、特定のクライアントからのサブスクライブ イベントを探すだけで、準備完了です。

それが役立つことを願っています

于 2013-05-06T21:25:22.413 に答える