Node.js 节点JS:socket.io-处理多个连接
我是在NodeJS中使用socket.io的新手,不过我编写了一个客户端(网页)/服务器程序来在客户端呈现一些统计数据。 要求类似于–呈现一个方框统计信息(从多个统计信息中选择)。由于用户可以打开多个浏览器窗口-我们有一个场景,其中一个框数据可以多次请求: 因此,我希望为同一个框的多个请求生成一个作业。以下是我为满足要求而实施的逻辑: 客户端:Node.js 节点JS:socket.io-处理多个连接,node.js,Node.js,我是在NodeJS中使用socket.io的新手,不过我编写了一个客户端(网页)/服务器程序来在客户端呈现一些统计数据。 要求类似于–呈现一个方框统计信息(从多个统计信息中选择)。由于用户可以打开多个浏览器窗口-我们有一个场景,其中一个框数据可以多次请求: 因此,我希望为同一个框的多个请求生成一个作业。以下是我为满足要求而实施的逻辑: 客户端: 建立与服务器的连接,创建数据通道: socket.on(boxname.toLowerCase(),函数(数据){ } 因此,每当我接收到一个boxn
var child = spawn('./scripts/copyscriptonbox.sh' , [boxName.toLowerCase(), getURL(boxName)]);
在代码的后面部分,我一直在向声明为全局的boxnames变量添加框名。因此,在一个新的boxname请求中,我搜索boxnames变量中出现的boxname的次数。如果计数为1或更多,则对我来说,这意味着脚本已经在该框上运行:
var noofbox = boxnames.split(boxName.toLowerCase()).length - 1;
child.on('exit', function (code) {
logger.info('child stream exit: ' + code);
if(code == 0)
{
boxNames += boxName.toLowerCase();
logger.info('Box name added: ' + boxNames);
res.render('boxpage', {}); //render a web page
io.sockets.on('connection', function (socket) {
logger.info('Connected to box :' + boxName);
if(noofbox <= 0)
schild = spawn('./scripts/boxmon.sh', [boxName.toLowerCase(), getURL(boxName)]);
schild.on('exit', function (code) {
logger.info('schild stream exit.');
});
schild.stderr.on('data', function (data) {
logger.info('stderr: ' + data);
});
schild.stdout.on('data', function (data) {
//generate response
});
socket.on('disconnect',function(){logger.info('Disconnect Killed');ServiceMonitorEnd(boxName.toLowerCase());});
});
}
});
}
var noofbox=boxName.split(boxName.toLowerCase()).length-1;
子.on('exit',函数(代码){
logger.info('子流出口:'+代码);
如果(代码==0)
{
boxNames+=boxName.toLowerCase();
logger.info('添加的框名称:'+框名称);
res.render('boxpage',{});//呈现网页
io.sockets.on('connection',函数(socket){
logger.info('连接到框:'+boxName);
如果(noofbox使用socket.once
而不是socket.on
,则是另一个类似.on的EventEmitter,第一次只发出一次。请检查。但请记住,之后客户端将不会接收任何此类事件