javascript - Socket IO - Socket.emit 发送到所有客户端

标签 javascript socket.io

我正在使用套接字 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()

关于javascript - Socket IO - Socket.emit 发送到所有客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545349/

相关文章:

javascript - SocketIO + PhantomJS 发出不工作

javascript - fetch(),你如何发出非缓存请求?

javascript - Drupal 随机加载旧版本的脚本

typescript - socket.io-redis typescript 错误

javascript - JS回调返回undefined不是一个函数

html - 多人 HTML5、Node.js、Socket.IO

javascript - Socketio 1.0 从所有客户端获取属性

javascript - 如何通过 Ajax 调用链接两个 Promise 并合并结果?

javascript - Javascript 已经是响应式的了吗?

javascript - 滚动时屏幕跳转