0

socket.io の作業を行っています。私の放出コールバックが起動されていないようです。私はそれを正しくやっていますか?

this.logger.debug("joining room " + roomId);      
callback = function() {
  return this.logger.debug('finished emitting join for socket');
};
// this.config.ioTypes.join resolves to "j"
this.socket.emit(this.config.ioTypes.join, { 
  user: this.config.user,
  room: roomId
}, callback);

私のログは正しいようです (上記のコードには、これらのログを生成するすべてが含まれているわけではないことに注意してください)。

DEBUG: joining room 1245 <-- first line from code above
DEBUG: join event for socket etQIXGAm59DYkCPk1_gj 
DEBUG: data: { user: 1, room: '1245' }             
DEBUG: received join event for 1, data: { user: 1, room: '1245' }

そして、それは終わりです。socket.io がコールバックを呼び出していないようです。しかし、ドキュメントはかなり明確です:

クライアントがメッセージの受信を確認したときに、コールバックを取得したい場合があります。

.sendこれを行うには、 or の最後のパラメーターとして関数を渡すだけ.emitです。さらに、 を使用する.emitと、確認はユーザーによって行われます。つまり、データを渡すこともできます。

ここで何か間違ったことをしていますか?

4

1 に答える 1

0

自分でそれを考え出しました。ドキュメントはこれについてあまり明確ではないため、これをここに残します。

以前は、サーバー側 (coffeescript) のハンドラーに util.inspect(arguments)何が入ってくるかを確認していました。on

  @logger.debug "onJoin args: " + util.inspect(arguments)

その結果、... '2': [Function: ack]必要なもののように見えました。そこで、onハンドラーの署名にそれを追加しました。callback() if callback?次に、ハンドラーの最後に追加しました。これまでのところ良さそうです。

于 2013-02-28T19:14:12.953 に答える