SocketIoClientDotNet – Socket.IO客户端库有时会发出两个连续的事件,有时不会

我正在使用SocketIoClientDotNet – .Net的Socket.IO客户端库,我试图一个接一个地发出两个事件。 有时它发出这两个事件,有时它只发出第一个。 以下是我的代码:

socketModel sm = new socketModel(); sm.CHANNEL = "channel_" + cHAT_MESSAGES.SENDER_ID + cHAT_MESSAGES.RECEIVER_ID; sm.DATA = chatMessageModelObj; string serializedData = Newtonsoft.Json.JsonConvert.SerializeObject(sm); var socket = IO.Socket(ConfigurationManager.AppSettings["socketlink"].ToString()); socket.On(Socket.EVENT_CONNECT, () => { socket.Emit("apimessage", serializedData); }); socket.On("apimessage", (data) => { Console.WriteLine(data); socket.Disconnect(); }); socketModel smSecond = new socketModel(); smSecond.CHANNEL = "messagecount_" + userID; if (updateCount == null) { smSecond.DATA = 0; } else { smSecond.DATA = updateCount.Count(); } string serializedDataSecond = Newtonsoft.Json.JsonConvert.SerializeObject(smSecond); socket.On(Socket.EVENT_CONNECT, () => { socket.Emit("apimessage", serializedDataSecond); }); socket.On("apimessage", (data) => { Console.WriteLine(data); socket.Disconnect(); }); 

当我重新启动我的nodejs服务器时,之前没有发出的所有第二个事件在重新启动后被发送。 任何帮助将不胜感激。

我遇到类似的问题,这是因为为socket对象创build的实例。 首先,我使用单例模式来获取导致我问题的套接字对象的实例,当我在两个不同的浏览器中打开相同的应用程序。 所以我尝试了使用会话保持我的套接字对象,而不是有多个套接字对象。 尝试使用会话的对象,而不是创build两个不同的实例。 希望能帮助到你!

一旦EVENT_CONNECT()成功连接,我就解决了这个问题。

 socketModel sm = new socketModel(); sm.CHANNEL = "channel_" + cHAT_MESSAGES.SENDER_ID + cHAT_MESSAGES.RECEIVER_ID; sm.DATA = chatMessageModelObj; string serializedData = Newtonsoft.Json.JsonConvert.SerializeObject(sm); socketModel smSecond = new socketModel(); smSecond.CHANNEL = "messagecount_" + cHAT_MESSAGES.RECEIVER_ID; if (updateCount == null) { smSecond.DATA = 0; } else { smSecond.DATA = updateCount.Count(); } string serializedDataSecond = Newtonsoft.Json.JsonConvert.SerializeObject(smSecond); var socket = IO.Socket(ConfigurationManager.AppSettings["socketlink"].ToString()); socket.Once(Socket.EVENT_CONNECT, () => { socket.Emit("apimessage", serializedData); socket.Emit("apimessage", serializedDataSecond); }); socket.Once("apimessage", () => { socket.Disconnect(); }); 

不过,我还有一个问题,是否有任何延误事件。