簡體   English   中英

SocketIO4Net確認回調

[英]SocketIO4Net Acknowledgement Callback

我正在嘗試使用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中使用等效功能,但在任何地方都找不到它。 我在這里找到的只有2個簽名:

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/的源代碼,其中提到了一個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);

我必須承認,這根本不是一種優雅的工作方式。 但這可能是目前唯一的方法,因為原始作者似乎不再維護該項目。 希望將來有人能完成未完成的部分。

如果查看示例項目 (在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));
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM