javascript - 【新人】socket.io自动建立很多连接的问题
PHP中文网
PHP中文网 2017-04-11 12:30:16
0
1
257

直接上代码吧,服务器端:

var express=require('express');
var app=express();
var net=require('net');
var http=require('http').createServer(app);
var io=require('socket.io').listen(http);
var net=require('net');
var nodeServer = new net.Socket();
var aSocket=null;

io.sockets.on('connection', function (socketIO) {
  aSocket=socketIO;
};
nodeServer.on('data', function(data) {
 if(aSocket!=null){
    aSocket.emit('pushToWebClient',useData);
    //客户端断开连接
    aSocket.on('disconnect', function () {
      console.log('DISCONNECTED FROM CLIENT');
    });

  }

客户端:

socket.on('pushToWebClient', function (useData) {

        
    });
    

代码截取了部分,过程是:从一个C++写的服务器接受数据,socket.io转发数据给客户端,然后显示到页面上。
接受一会,如果关闭网页,就会出现一堆

DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
DISCONNECTED FROM CLIENT
...(此处省略无数行)

我估计是每次io建立了很多次连接,要怎么才能阻止建立这么多呢?

PHP中文网
PHP中文网

认证高级PHP讲师

reply all(1)
洪涛

问题解决了,删除掉

aSocket.on('disconnect', function () {
      console.log('DISCONNECTED FROM CLIENT');
    });
    
    

或者把它放出exbuffer就行了,而且再也没有setMaxlistener的提示了。
个人不是很明白原理,可能在于一个个嵌套影响,还有disconnect的事件释放不了sockect,所以打印了很多出来。
这个方法有个问题,就是只能一对一,毕竟把socket设置成了全局变量。
直接换成io.emit???

后续待验证。。。
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template