当前位置: 首页 > 知识库问答 >
问题:

socket.io socket.on(“connect”...不允许同一页获得多个套接字

祁远
2023-03-14

我设置了一个测试平台,试图在同一客户端和后端服务器之间创建两个套接字。打开调试后,我可以看到对两个不同套接字(AAAA和AAAB)的xhr open GET请求,对应的套接字接收类型为“open”的消息,数据的sid响应套接字id(AAAA或AAAB)。我在下面的跟踪中突出显示了这些内容。但是,这两次都发生在socket.on之前(“connect...函数被调用,因此socket.io.engine.id只反映第二个套接字的请求,该方法似乎被调用了两次。如果我猜测,查找将看到两个连接都使用的URI以/结尾,并正在读取后者(就像它不能区分两个未完成的调用一样)。我维护执行io.connect的对象中显示的channelName,以便跟踪哪个套接字被调用。

我希望跟踪的这一部分可以显示发生了什么--我还没有找到订阅是在哪里管理的,无法理解它是如何查找哪个监听器的...两个io.connect调用(一个用于NatA,一个用于NatB)使用相同的URI和端口,并且都使用设置为true的forceNew:

            console.log(this.channelName+": Connecting to " + uri);
            this.socket = io.connect(uri,{'channelName': initEvent.channelName, 'forceNew': true});
            this.socket.on("connect", function() {
                console.log(self.channelName+": Setting SocketID:"+self.socket.io.engine.id);

因此,在下面的日志中,您可以看到调用io.connect的NatA和NatB标记,以及调用on(“connect”被调用,但只调用第二个NatB套接字,并且被调用两次)的监听器的位置。

NATA:连接到http://localhost:3001

socket.io-client:Manager readyState closed+0ms

socket.io-客户端:管理器打开http://localhost:3001+1ms

Engine.io-Client:套接字创建传输“轮询”+0ms

socket.io-client:Manager连接尝试将在20000+6ms后超时

socket.io-client:Manager readyState打开+1ms

NATB:连接到http://localhost:3001

IO-客户机:轮询轮询+1ms

Engine.io-Client:polling-xhr xhr poll+1ms

engine.io-client:polling-xhr xhr open get:http://localhost:3001/socket.io/?eio=3&transport=polling&t=1443463452629-1+1ms

Engine.io-Client:套接字设置传输轮询+1ms

socket.io-client:Manager连接尝试将在20000+6ms后超时

socket.io-客户端:Manager readyState打开+0ms

Engine.io-Client:套接字探测传输“WebSocket”+0ms

ingine.io-client:socket创建传输“WebSocket”+0ms

IO-客户机:轮询轮询+1ms

IO-客户端:套接字套接字打开+0ms

socket.io-客户端:管理器打开+9ms

IO-Client:套接字传输打开-连接+8ms

Engine.io-Client:polling-xhr xhr poll+0ms

engine.io-client:polling-xhr xhr open get:http://localhost:3001/socket.io/?eio=3&transport=polling&t=1443463452655-3&sid=qrjctk24vsx9-rjzaaab+1ms

engine.io-client:polling-xhr xhr data null+0ms

Engine.io-Client:套接字探测传输“WebSocket”打开+1ms

IO-Client:套接字探测传输“WebSocket”pong+12ms

Engine.io-Client:套接字暂停当前传输“轮询”+0ms

Engine.io-Client:轮询我们当前正在轮询-等待暂停+0ms

ingine.io-client:polling polling get data ArrayBuffer+7ms

IO-client:socket socket receive:键入“message”,数据“0”+1ms

Engine.io-Client:轮询前暂停轮询完成+3ms

Engine.io-Client:轮询暂停+1ms

Engine.io-Client:套接字更改传输并发送升级包+0ms

socket.io-解析器将0解码为%j+7ms对象{type:0,nsp:“/”}

NATB:设置SOCKETID:QRJCTK24VSX9-RJZAAAB

共有1个答案

奚才良
2023-03-14

在您发布的代码中,我没有看到如何打开两个套接字,但是如果在同一个JavaScript对象中打开每个套接字,并且您将两个套接字都映射到this.socket,那么第一个套接字将在内存中被第二个套接字覆盖。

 类似资料:
  • > 当同一主机上的两个进程使用网络套接字通信时,它们的套接字必须使用不同的端口吗? 我想是的,因为套接字由IP地址和端口号标识。如果进程的套接字使用相同的端口,则无法区分它们的套接字,对吗? 但是一个主机可以有多个网络接口,所以有多个IP地址。同一个主机上的多个网络接口是否可以共享一个端口,从而使两个套接字共享同一个端口? 例如,SSH本地端口转发由以下选项指定: 然后本地主机(SSH客户端运行的

  • 问题内容: 我正在尝试在docker centos7映像上安装ambari 2.6,但是在ambari设置步骤中以及恰好初始化Postgresql db时,我收到此错误: 无法获得D-Bus连接:不允许操作 每次尝试在docker映像上运行服务时,都会遇到此错误。 我尝试了网络中的所有解决方案,但没有任何效果。 有谁知道如何解决这个问题? 先感谢您 问题答案: 使用此命令 docker run -

  • 我可以并行连接服务器套接字和客户端套接字的多个独立I/O流,以便每对I/O流可以同时发送不同的数据吗? 如何在java中实现这样的连接而不增加服务器和客户端之间的套接字数量?

  • 问题内容: 我在PHP中运行一个脚本,该脚本uisng循环为MySQL创建了一个字符串查询。 执行脚本后,出现以下错误: “您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在’UPDATE BANNERS SET pos = 1 WHERE BID = 5; UPDATE BANNERS SET pos = 2 WHERE BID = 1’附近使用正确的语法。在第2行 在错误

  • 我正在做一个Android Studio项目,有几个活动。我目前正在尝试读取localhost上的Java Servlet的输出,但它似乎由于套接字权限而崩溃。 我做了一个新的项目,使用了完全相同的代码,工作很完美。所以我不明白为什么不愿意在我的项目上工作。 我希望它读取数据,但它在这一行崩溃: 这是错误输出:

  • 问题内容: 我正在尝试调整我的简单套接字服务器,使其可以通过多线程具有多个TCP连接,但是我似乎无法使其正常工作。到目前为止,我的代码如下,我不太确定从这里可以去哪里: 谁能为我提供一些有关如何执行此操作的指示,以及为什么我当前的实现无法正常工作?我在这里浏览了Java教程http://download.oracle.com/javase/tutorial/networking/sockets/e