【问题标题】:In socket io, one user connection creates dozens of "joining room"?在socket io中,一个用户连接创建了几十个“加入房间”?
【发布时间】:2017-02-10 18:03:59
【问题描述】:

我在 linux 上有一个 nodejs socket.io 应用程序连接到运行 socket-io-client 的客户端。

nosejs 服务器是:

  • 节点 v6.7.0
  • 快递4.10.8
  • socket.io 1.4.5

java端使用maven:

  <dependency>
     <groupId>io.socket</groupId>
     <artifactId>socket.io-client</artifactId>
     <version>0.8.3</version>
  </dependency>

我刚刚从 socket.io 0.9 迁移,所以我只有一个用户连接到 nodejs 套接字服务器。

在某些情况下,我有一个奇怪的现象是这个连接创建了几十个连接

socket.io:socket socket connected - writing packet +106ms
socket.io:socket joining room /#q-brvq0-lMhLKY6tAAAR +0ms
socket.io:socket joined room /#q-brvq0-lMhLKY6tAAAR +0ms
socket.io:socket socket connected - writing packet +46ms
socket.io:socket joining room /#p-_dEpC_2IJoiVtFAAAS +0ms
socket.io:socket joined room /#p-_dEpC_2IJoiVtFAAAS +0ms
socket.io:socket socket connected - writing packet +4ms
socket.io:socket joining room /#9Ha8CuQh6Vw3OROuAAAT +0ms
socket.io:socket joined room /#9Ha8CuQh6Vw3OROuAAAT +0ms
socket.io:socket socket connected - writing packet +192ms
socket.io:socket joining room /#qu1Hhixulei3fDV7AAAU +0ms
socket.io:socket joined room /#qu1Hhixulei3fDV7AAAU +0ms
socket.io:socket socket connected - writing packet +24ms
socket.io:socket joining room /#0Jd2FY5rY-_Rfps6AAAV +0ms
socket.io:socket joined room /#0Jd2FY5rY-_Rfps6AAAV +0ms
socket.io:socket socket connected - writing packet +122ms
socket.io:socket joining room /#BCgabXA28IBHV94NAAAW +0ms
socket.io:socket joined room /#BCgabXA28IBHV94NAAAW +0ms
socket.io:socket socket connected - writing packet +19ms
socket.io:socket joining room /#ibtuQc60nb7kExHvAAAX +1ms

从 java 客户端,这是创建连接的代码:

        try {
             System.out.println("socket phy create");
            socket = IO.socket(domain+":"+port);
        } catch (URISyntaxException ex) {
            System.out.println("socket URISyntaxException");
        }

95% 的时间它只创建一个“套接字连接”,而 5% 的时间它创建了几十个。是什么问题,或者您能建议一种调试方法吗?

【问题讨论】:

    标签: node.js express socket.io


    【解决方案1】:

    问题出在系统实现上..

    在调试时,我有时会关闭套接字服务器(为了更改一些代码)。在客户端,我每 5 秒进行一次重新连接检查。这个方法每次调用createNodeConnection。最后,当我重新加载套接字服务器时,所有这些连接都立即连接。

    解决方法是将“套接字创建”与“套接字连接”分开(并在重新连接方法中使用“套接字连接”)

    public void createNodeConnection() {
            try {
                socket = IO.socket(domain+":"+port);
            } catch (URISyntaxException ex) {
                System.out.println("socket URISyntaxException");
            }
    
            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
              @Override
              public void call(Object... args) {...//handle code..}
    
            }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
    
              @Override
              public void call(Object... args) {...//handle code..}
    
            }).on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
                @Override
                public void call(Object... args) {...//handle code..};
            });            
    
            socketConnection();
    };
    
    
    public void socketConnection() {
             socket.connect();            
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2016-12-14
      • 2020-03-07
      • 2017-03-15
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多