【问题标题】:How to send broadcast to all connected client in node js如何在节点js中向所有连接的客户端发送广播
【发布时间】:2017-12-31 06:48:55
【问题描述】:

我是使用 MEAN 堆栈的应用程序的新手。它是一个基于物联网的应用程序,并使用 nodejs 作为后端。

我有一个场景,我必须向每个连接的客户端发送广播,这些客户端只能打开套接字并可以等待任何传入数据。除非像网络浏览器一样,它们无法执行任何事件,直到现在我已经通过 Socket.IOExpress.IO 但找不到任何有助于实现我想要的东西 send raw data to open socket connections'

是否有任何其他节点模块来实现这一点。 ?

这是使用WebSocketServer的代码,

    const express = require('express');
    const http = require('http');
    const url = require('url');
    const WebSocket = require('ws');

    const app = express();

    app.use(function (req, res) {
      res.send({ msg: "hello" });
    });

    const server = http.createServer(app);
    const wss = new WebSocket.Server({ server });

   wss.on('connection', function connection(ws) {
     ws.on('message', function(message) {
       wss.broadcast(message);
     }
   }

   wss.broadcast = function broadcast(msg) {
     console.log(msg);
     wss.clients.forEach(function each(client) {
       client.send(msg);
     });
    };

    server.listen(8080, function listening() {
      console.log('Listening on %d', server.address().port);
    });

现在,我的查询是何时执行此代码,

wss.on('connection', function connection(ws) {
    ws.on('message', function(message) {
       wss.broadcast(message);
    }
 }

【问题讨论】:

  • 可以使用websocket广播方式

标签: javascript node.js sockets websocket


【解决方案1】:
var WebSocketServer = require("ws").Server;

var wss = new WebSocketServer({port:8100});

wss.on('connection', function connection(ws) {
    ws.on('message', function(message) {
       wss.broadcast(message);
    }

}

wss.broadcast = function broadcast(msg) {
   console.log(msg);
   wss.clients.forEach(function each(client) {
       client.send(msg);
    });
};

【讨论】:

  • 什么时候会触发connection事件?
  • 将此代码保存为 .js 扩展名,如“server.js”,使用节点命令运行,如“node server.js”
  • 根据您的新代码和查询,该部分代码表示,当 websocket 连接打开并收到任何消息时,它将该消息传递给广播函数,然后广播函数发送/向所有已连接的客户端广播
【解决方案2】:

尝试以下代码将消息从服​​务器广播到每个客户端。

wss.clients.forEach(function(client) {
    client.send(data.toString());
});

演示服务器代码,

const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 2055 },()=>{
    console.log('server started')
})
wss.on('connection', (ws) => {
   ws.on('message', (data) => {
      console.log('data received \n '+ data)
      wss.clients.forEach(function(client) {
         client.send(data.toString());
      });
   })
})
wss.on('listening',()=>{
   console.log('listening on 2055')
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-30
    • 2015-05-29
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多