23

クライアントからカスタムメッセージを送信しようとしています。その成功と失敗に対していくつかのアクションを実行する必要があります。では、successコールバックをemitメソッドにアタッチするにはどうすればよいですか?

エラーコールバックについては、Exposed events docを使用して、機能させました

socket.on('error', () -> console.log("Error Occured"))

成功のために、私は試しました

socket.emit('my custom method', {content: json},() -> console.log("Emitted"))

このコールバックは、成功か失敗かに関係なくトリガーされることはありません。

どうすればサクセスハンドラーを入手できますか?

4

2 に答える 2

72

ドキュメントを見ると、コールバック関数を渡す例が示されています-2番目の最後の例:http ://socket.io/docs/#Sending-and-getting-data-acknowledgements

元サーバー:

    socket.on('formData', 
              function(data, fn){
                      // data is your form data from the client side
                      // we are here so we got it successfully so call client callback
                      // incidentally(not needed in this case) send back data value true 
                      fn(true);
              }
             );

クライアント:

      socket.emit('formData', 
                  data, 
                  function(confirmation){
                          // send data
                          // know we got it once the server calls this callback      
                          // note -in this ex we dont need to send back any data 
                          // - could just have called fn() at server side
                          console.log(confirmation);
                  }
                 );
于 2014-02-28T05:11:05.843 に答える
18

2番目のコードが何も実行しない理由は、socketIOで公開されたイベントがsocket.onメソッドに対して定義されているためです。したがって、これを実現するには、サーバーapp.jsに別のemitを追加する必要があります

クライアントはカスタムメッセージを送信し、socket.emitを介してJSONデータをソケットに送信します。また、成功コールバックを処理する更新関数を取得します。

socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
 //do stuff here
});

サーバー側クライアントから送信されたメッセージから呼び出しを取得し、messageSuccessをクライアントに送信します

socket.on ('message', function (data) {
 io.sockets.emit ('messageSuccess', data);
});

おそらく、この動作からモジュールを作成して、そのように処理したいすべてのメッセージにこれを添付できるようにすることができます。

于 2012-11-25T10:27:01.927 に答える