javascript - 为什么在这种情况下我不能使用 socket.emit.broadcast ?

标签 javascript node.js socket.io

您好,我的服务器上有一个计数器,用于记录有多少人已连接。因此,每当用户连接时,我想向他发送用户数量。问题是,当用户连接时,他发送套接字并且服务器接收它。但是当服务器发送带有用户数量的套接字时,客户端不会收到此消息。

我在使用socket.broadcast.emit时遇到这个问题。如果我使用 socket.emit 我确实收到了它。

Server.js

socket.on('update', function () {
    console.log('Update', users)
    socket.broadcast.emit('user',users) //Doesn't work
    socket.emit('user', users) // Works
})

Index.js

$(document).ready(function() {

var users = 0
var socket = io()
.
.
.

socket.on('user', changeUsers)
socket.emit('update');
.
.
.

最佳答案

广播意味着向除启动消息的套接字之外的其他所有人发送消息。

因此连接的用户将不会收到广播。

来自 socket.io docs

这可能有助于解决以下问题:

发送和接收事件

Socket.IO 允许您发出和接收自定义事件。除了连接、消息和断开连接之外,您还可以发出自定义事件:

服务器:

// note, io(<port>) will create a http server for you
var io = require('socket.io')(80);

io.on('connection', function (socket) {
  io.emit('this', { will: 'be received by everyone'});

  socket.on('private message', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
  });

  socket.on('disconnect', function () {
    io.emit('user disconnected');
  });
});

关于javascript - 为什么在这种情况下我不能使用 socket.emit.broadcast ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899260/

相关文章:

javascript - 使用 jquery 查找 html 标签号

javascript - Angular Bootstrap 正在创建重复的 Bootstrap 模式

javascript - 如何从 Node 中的api promise 返回对象

node.js - 发布到基本访问授权保护的资源

javascript - 不是 jQuery 中的类选择器

javascript - 我是否需要在每个模块文件中使用 Promise.promisifyAll() ?

javascript - Socket.io 消息事件多次触发

javascript - 在浏览器的子窗口中登录完成后通知父窗口

javascript - 使用 Web 套接字存储数据时 NodeJS 可能具有最佳性能

javascript - 如何使用 Javascript 判断 HTML 属性是否存在