0

NodeJS サーバーとの通信に SocketIO4Net を使用しようとしています。NodeJS SocketIO doc で言及されているように、次のようなことができます。

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});

fn がある場所は、コールバック関数を参照します。SocketIO4Net で同等の機能が必要ですが、どこにも見つかりません。ここで見つけた署名は 2 つだけです。

public virtual void On(string eventName, Action<IMessage> action);
public virtual void On(string eventName, string endPoint, Action<IMessage> action);

この機能は SocketIO4Net で利用できますか? または、サーバーに確認するために別のイベントを発行する必要がありますか?

4

2 に答える 2

0

サンプル プロジェクト(codeplex 上) を見ると、サンプルの CallbackExample が見つかります。クライアントはメッセージを送信でき、サーバーによって処理されてコールバックが実行されると、そのコールバックがクライアントで実行されます。

Console.WriteLine("Emit [socket].[messageAck] - should recv callback [root].[messageAck]");
socket.Emit("messageAck", new { hello = "mama" }, null, (callback) =>
    {
        var jsonMsg = callback as JsonEncodedEventMessage; // callback will be of type JsonEncodedEventMessage, cast for intellisense
        Console.WriteLine(string.Format("callback [root].[messageAck]: {0} \r\n", jsonMsg.Args));
    });
于 2014-06-27T02:44:11.287 に答える
0

だから私は自分で解決策を見つけました。http://socketio4net.codeplex.com/のソース コードを使用しています。これには、develop ブランチがhttps://github.com/jstott/socketio4net/tree/developにあることが記載されています。けれど。そこで、codeplex パッケージから始めて、この機能を自分で実装しようとしました。

codeplex の SocketIo4Net パッケージが不完全であることが判明しました。最初にいくつかのバグを修正する必要があります。パッチを当てたコードは私のリポジトリにあります: https://git01.codeplex.com/forks/zhangyaoxing/socketio4net

このパッケージを使用すると、次の方法で AckMessage をサーバーに手動で送信できます。

// Simulate a ack callback because SocketIO4Net doesn't provide one by default.
var msgText = JsonConvert.SerializeObject(new object[] {
    // object you want to send back
});
var ack = new AckMessage()
{
    AckId = msg.AckId,
    MessageText = msgText
};
this.socket.Send(ack);

これが仕事をするためのエレガントな方法ではないことを認めなければなりません。しかし、元の作者はもうプロジェクトを維持していないように見えるので、それを行う唯一の方法かもしれません。将来誰かが未完成の部分を完成させてくれることを願っています。

于 2014-04-19T09:56:46.200 に答える