C# SocketIoClientDotNet-Socket.IO客户端库有时发出两个连续事件,有时不发出
我正在使用.Net的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
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个。不同的是频道名称和数据。