Socket IO - Socket.Emit被发送到所有客户端

Socket IO - Socket.emit is sent to all clients

本文关键字:Socket 客户端 IO Emit      更新时间:2023-09-26

我正在使用socket io创建一个游戏。播放器连接如下:

var playerName = document.getElementById("name").value;
socket.emit('setup player', {
    name : playerName
});

然后在服务器上,播放器被设置,他的信息被发送回客户端:

function onSetupPlayer(data) {
    ...
    var newPlayer = new Player(x, y, color, data.name,
        this.id, scale);
    socket.emit('setup game', {
        localPlayer : newPlayer
    });
    ...
    sockets[this.id] = socket;
}

下面的调用:

socket.emit('setup game', {
        localPlayer : newPlayer
});

应该只将安装数据发送回最初请求安装的客户端。然而,设置呼叫被发送到大厅的每个人。

这可能与我使用localhost来测试它的事实有关吗?我还在同一台机器上使用不同的选项卡进行了测试。如果这就是导致问题的原因,有没有办法解决它?因为这在测试我的游戏时非常烦人。

编辑:初始化:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var socket = require('socket.io')(http);
var path = require('path');
var io = require('socket.io')(80);
...
var setEventHandlers = function() {
    socket.sockets.on("connection", onSocketConnection);
};

正在监听连接:

function onSocketConnection(client) {
    ...
    client.on("setup player", onSetupPlayer);
    ...
};

在客户端我有这个:

var setEventHandlers = function() {
    socket.on("setup game", onSetupGame);
     ...
}

socket.emit发送事件给所有人,除了这个。要将数据发送回该用户,请尝试

io.to(socket).emit()