Socket IO 一直断开并重新连接

4

我对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函数以及其他一些功能。有解决方法吗?

1
我有同样的问题。 - Kevv Keka
1个回答

1

对于遇到此问题的任何人,请检查客户端和服务器是否使用相同的协议版本。

从高层次来看,这很可能是由于服务器和客户端之间的协议版本不匹配引起的。我在JS应用程序中也遇到了同样的问题。结果发现我在客户端上使用了一些旧版本的socket.io,而在服务器上使用了最新版本。在您提供的存储库中,我们可以找到:

// EngineIoClientDotNet/Src/EngineIoClientDotNet.mono/Parser/Parser.cs
public static readonly int Protocol = 3;

这个(现在已弃用的)客户端使用的是Engine.IO协议v3。您没有提供服务器上使用的socket.io版本信息,但它可能只是在Engine.IO协议上使用了不同的修订版。
顺便说一下,更低级别地说:我猜测客户端可能能够连接,但它没有以正确的方式响应服务器的第一个ping命令(或反过来)。因此,连接立即断开。 Socket.IO在实现ping-pong机制方面有着不兼容性的历史变更,这可能是根本原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接