SocketIO4Net确认回调



我正在尝试使用SocketIO4Net与我的NodeJS服务器进行通信。正如NodeJS SocketIO文档所提到的,我们可以做一些类似的事情:

var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  socket.on('ferret', function (name, fn) {
    fn('woot');
  });
});

有fn的地方指的是回调函数。我需要SocketIO4Net中的等效函数,但我在任何地方都找不到。我在这里只找到了两个签名:

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

所以我想知道,SocketIO4Net中有这个功能吗?还是我必须发出另一个事件才能与服务器确认?

所以我自己找到了一个解决方案。我使用的源代码来自http://socketio4net.codeplex.com/,其中提到一个开发分支机构位于: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);

我不得不承认,这根本不是一种优雅的工作方式。但这可能是现在唯一的方法,因为原作者似乎不再维护这个项目了。希望将来有人能完成未完成的部分。

如果您查看示例项目(在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} rn", jsonMsg.Args));
    });

相关内容

  • 没有找到相关文章