最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Socket.io断开事件错误地为其他用户触发,然后再次连接

IT培训 admin 5浏览 0评论

Socket.io断开事件错误地为其他用户触发,然后再次连接

我在socket.io库中为Node.js的disconnect事件有问题。当我断开一个用户(关闭客户端应用程序)时,不仅为这一个用户而且为所有连接的用户触发断开连接事件。在此之后,他们再次重新连接。

我想只断开这个特定的用户。所有其他人应该仍然连接。

如下所示,同时为这些用户触发断开连接事件,并且它们也在同一时间连接。

黄线没问题,但下面标记为红色不应该发生。

'use strict';
var events = require('./events.js');
var player = require('./player.js');
var moment = require('moment');

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var uuid = require('uuid');


app.set('port', process.env.PORT || 3000);

// all connected clients
var clients = [];

server.listen(app.get('port'), function () {
    console.log("---------- SERVER IS RUNNING ----------");
});

io.on("connection", function (socket) {
    socket.uuid = uuid.v1();
    clients.push(socket);
    PrintEvent("connection", socket);

    socket.on("disconnect", function () {
        socket.broadcast.emit("USER_DISCONNECTED", socket.playerID);
        var i = clients.indexOf(socket);
        clients.splice(i, 1);

        PrintEvent("disconnect", socket);
    });
});

function PrintEvent(eventName, socket) {
    console.log(moment().format("YYYY-MM-DD HH:mm:ss") + "( " + clients.length + " ) " + eventName + " socketID: " + socket.id);
}

很少有技术服务器细节:

  • npm -v:5.5.1
  • 因为-v:v 8 9. 0
  • socket.IO: 2.0.4

很少有技术客户详细信息:

  • 来自assetstore的Unity 3D + socket.io免费插件

请你帮助我好吗?我不知道它为什么不能正常工作。

回答如下:

据说Unity3D插件调用Socket.IO导致了这个问题。当我使用Node.js编写的客户端测试服务器代码时,一切正常。

我也开始测试另一个插件Best HTTP,我可以确认它没有造成这个断开连接错误。到现在为止还挺好 ;)

Socket.io断开事件错误地为其他用户触发,然后再次连接

我在socket.io库中为Node.js的disconnect事件有问题。当我断开一个用户(关闭客户端应用程序)时,不仅为这一个用户而且为所有连接的用户触发断开连接事件。在此之后,他们再次重新连接。

我想只断开这个特定的用户。所有其他人应该仍然连接。

如下所示,同时为这些用户触发断开连接事件,并且它们也在同一时间连接。

黄线没问题,但下面标记为红色不应该发生。

'use strict';
var events = require('./events.js');
var player = require('./player.js');
var moment = require('moment');

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var uuid = require('uuid');


app.set('port', process.env.PORT || 3000);

// all connected clients
var clients = [];

server.listen(app.get('port'), function () {
    console.log("---------- SERVER IS RUNNING ----------");
});

io.on("connection", function (socket) {
    socket.uuid = uuid.v1();
    clients.push(socket);
    PrintEvent("connection", socket);

    socket.on("disconnect", function () {
        socket.broadcast.emit("USER_DISCONNECTED", socket.playerID);
        var i = clients.indexOf(socket);
        clients.splice(i, 1);

        PrintEvent("disconnect", socket);
    });
});

function PrintEvent(eventName, socket) {
    console.log(moment().format("YYYY-MM-DD HH:mm:ss") + "( " + clients.length + " ) " + eventName + " socketID: " + socket.id);
}

很少有技术服务器细节:

  • npm -v:5.5.1
  • 因为-v:v 8 9. 0
  • socket.IO: 2.0.4

很少有技术客户详细信息:

  • 来自assetstore的Unity 3D + socket.io免费插件

请你帮助我好吗?我不知道它为什么不能正常工作。

回答如下:

据说Unity3D插件调用Socket.IO导致了这个问题。当我使用Node.js编写的客户端测试服务器代码时,一切正常。

我也开始测试另一个插件Best HTTP,我可以确认它没有造成这个断开连接错误。到现在为止还挺好 ;)

发布评论

评论列表 (0)

  1. 暂无评论