C# SocketIoClientDotNet-Socket.IO客户端库有时发出两个连续事件,有时不发出

C# SocketIoClientDotNet-Socket.IO客户端库有时发出两个连续事件,有时不发出,c#,.net,node.js,socket.io,C#,.net,Node.js,Socket.io,我正在使用.Net的SocketIoClientDotNet-Socket.IO客户端库,并试图一个接一个地发出两个事件。有时它同时发出两个事件,有时只发出第一个事件。下面是我的代码: socketModel sm = new socketModel(); sm.CHANNEL = "channel_" + cHAT_MESSAGES.SENDER_ID + cHAT_MESSAGES.RECEIVER_ID; sm.DATA = chatMessageModelObj; string ser

我正在使用.Net的SocketIoClientDotNet-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服务器时,所有之前未发出的第二个事件都会在重新启动后发送。非常感谢您的帮助。

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

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

我通过在成功连接
EVENT\u 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();
});

不过,我还有一个问题,就是事件中是否存在延迟。

我通过在成功连接
EVENT\u 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();
});

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

谢谢您的回复。你说的会话是什么意思?@MuhammadSaqlain你可以在这里查看-。这将在asp.NET中为您提供有关会话的详细解释。我知道会话是什么,但什么是会话w.r.t socketio对象?谢谢您的回复。你说的会话是什么意思?@MuhammadSaqlain你可以在这里查看-。这将为您详细解释asp.NET中的会话。我知道会话是什么,但会话是什么w.r.t socketio对象?您应该始终连接并断开与客户端的连接,而不要断开与服务器的连接。当您同时从客户端和服务器断开连接时,可能会发生随机事件。这是我的API服务器,它正在向nodejs服务器发送事件。这意味着我正在处理与客户端的断开连接。是的,但如果服务器在您启动断开连接后也发出断开连接,则可能会出现竞争条件。唯一真正的方法是使用像wireshark或fiddler这样的嗅探器跟踪TCP。查找结束消息以及序列号,查看是否同时从客户端和服务器启动了多个断开连接。为什么要为
connect
事件设置两个事件处理程序?如果您在代码中添加注释并解释为什么要背靠背地发出两个事件,这将非常有用。一个事件处理程序中的两个事件不会同时发出两个事件。其次,我想发送多个事件,但不限于2个。不同的是通道名称和数据。您应该始终连接并断开与客户端的连接,而不要断开与服务器的连接。当您同时从客户端和服务器断开连接时,可能会发生随机事件。这是我的API服务器,它正在向nodejs服务器发送事件。这意味着我正在处理与客户端的断开连接。是的,但如果服务器在您启动断开连接后也发出断开连接,则可能会出现竞争条件。唯一真正的方法是使用像wireshark或fiddler这样的嗅探器跟踪TCP。查找结束消息以及序列号,查看是否同时从客户端和服务器启动了多个断开连接。为什么要为
connect
事件设置两个事件处理程序?如果您在代码中添加注释并解释为什么要背靠背地发出两个事件,这将非常有用。一个事件处理程序中的两个事件不会同时发出两个事件。其次,我想发送多个事件,但不限于2个。不同的是频道名称和数据。