javascript - Socket IO不断断开并重新连接

标签 javascript c# sockets socket.io

我对sockets和socket.io非常陌生,所以如果这是一个明显的问题,我深表歉意。我正在使用 C# client for Socket.IO并运行本地 javascript 服务器。这是我的 app.js:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

io.on('connection', function(socket) {
   console.log('A user connected');

   socket.on('test', function () {
      console.log('Test run'); });


   socket.on('disconnect', function () {
      console.log('A user disconnected'); });

});

http.listen(3000, function() {
   console.log('listening on localhost:3000'); });

在我的主要 C# 类(它是一个 Windows 窗体应用程序)中,与套接字相关的唯一代码行是实例变量 private Socket socket = IO.Socket("http://localhost:3000/");。 .然而由于某种原因,服务器反复接收连接和断开事件。这是我的控制台的屏幕截图:
screenshot

这一切都会在我运行我的 C# 程序时自动发生,无需任何交互,并在我关闭它时立即停止。关于它为什么不断连接/断开的任何想法?

编辑 :无论出于何种原因,当我从项目中删除 Newtonsoft.json 时,问题似乎就消失了。但是,如果没有它,我将无法像其他人一样使用 Emit 功能。有解决方法吗?

最佳答案

对于遇到此问题的任何人,请检查客户端和服务器是否使用相同的协议(protocol)版本。
在高层次上,这很可能是由服务器和客户端之间的协议(protocol)版本不匹配引起的。我在 JS 应用程序中遇到了同样的问题。原来我在客户端上使用了一些旧版本的 socket.io,而在服务器上使用了最新版本。在您提供的存储库中,我们可以找到:

// EngineIoClientDotNet/Src/EngineIoClientDotNet.mono/Parser/Parser.cs
public static readonly int Protocol = 3;
所以这个(现在已弃用)客户端使用的是 Engine.IO 协议(protocol) v3。您没有提供您在服务器上使用的 socket.io 版本的信息,但它可能只是在 Engine.IO 协议(protocol)上使用了不同的版本。
作为旁注,说得更底层:我猜客户端可能能够连接,但它没有以正确的方式(或相反)响应服务器的第一个 ping 命令。因此,连接会立即断开。 Socket.IO 在实现 ping-pong 机制方面有着重大变化的历史,这可能是根本原因。

关于javascript - Socket IO不断断开并重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140501/

相关文章:

javascript - Elm,模型如何与订阅保持同步?

javascript - 保护 JavaScript API 的安全

c# - 跨线程操作无效,从创建它的线程以外的线程访问控制

c# - 捕获事件窗口的屏幕截图?

c# - 不是每一个 IProgress<int> 的结果都从任务中出来

c - 使用套接字读取 char* 时出现段错误

c++ - 处理套接字断开连接。 boost/Winsock

javascript - 使用javascript选择计算税率

javascript - 如何从函数访问 anguljarjs 服务内的变量?

python - 如何在python中同时监听命名管道和套接字