首页 > 其他分享 >无涯教程-Socket.IO - 广播服务

无涯教程-Socket.IO - 广播服务

时间:2024-01-27 21:31:40浏览次数:22  
标签:function socket IO clients 无涯 io var 客户端 Socket

Broadcasting意味着向所有连接的客户端发送消息,我们可以将消息发送给所有连接的客户端,我们可以使用 io.sockets.emit 方法。

注意-这将向所有连接的客户端 ALL 发出事件(该事件可能触发了此事件的Socket)。

在此示例中,我们将向所有用户广播已连接客户端的数量。更新 app.js 文件以合并以下内容。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

var clients = 0;
io.on('connection', function(socket) {
   clients++;
   io.sockets.emit('broadcast',{ description: clients + ' clients connected!'});
   socket.on('disconnect', function () {
      clients--;
      io.sockets.emit('broadcast',{ description: clients + ' clients connected!'});
   });
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

在客户端,我们只需要处理广播事件-

<!DOCTYPE html>
<html>
   <head>
      <title>Hello Learnfk</title>
   </head>
   <script src="/socket.io/socket.io.js"></script>
   <script>
      var socket=io();
      socket.on('broadcast',function(data) {
         document.body.innerHTML='';
         document.write(data.description);
      });
   </script>
   <body>Hello Learnfk</body>
</html>

如果连接四个客户端,您将得到以下输出:

Broadcast to all

这是为了向所有人发送事件。现在,如果我们想向所有人发送事件,但引发事件的客户端,则可以使用 socket.broadcast.emit 。

让我们向新用户发送欢迎消息,并向其他客户更新有关其加入的信息。因此,在您的app.js文件中,在客户端连接时向他发送欢迎消息,并将连接的客户端广播给所有其他客户端。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

var clients = 0;
io.on('connection', function(socket) {
   clients++;
   socket.emit('newclientconnect',{ description: 'Hey, welcome!'});
   socket.broadcast.emit('newclientconnect',{ description: clients + ' clients connected!'})
   socket.on('disconnect', function () {
      clients--;
      socket.broadcast.emit('newclientconnect',{ description: clients + ' clients connected!'})
   });
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

HTML来处理此事件-

<!DOCTYPE html>
<html>
   <head>
      <title>Hello Learnfk</title>
   </head>
   <script src="/socket.io/socket.io.js"></script>
   <script>
      var socket=io();
      socket.on('newclientconnect',function(data) {
         document.body.innerHTML='';
         document.write(data.description);
      });
   </script>
   <body>Hello Learnfk</body>
</html>

现在,最新的客户端将收到欢迎消息,其他客户端将获得当前连接到服务器的客户端数量。

参考链接

https://www.learnfk.com/socket.io/socket.io-broadcasting.html

标签:function,socket,IO,clients,无涯,io,var,客户端,Socket
From: https://blog.51cto.com/u_14033984/9445409

相关文章

  • Gin 应用多实例部署session问题、session参数与刷新
    目录一、GinSession存储的实现方案二、memstore:基于内存的实现2.1基本使用2.2关键参数三、使用redis:多实例部署3.1使用redis优势3.2基本使用四、信息安全的三个核心概念五、GinSession参数5.1参数介绍六、Session自动刷新一、GinSession存储的实现方案cookie:基于co......
  • 常用标准IO
    标准IO2024.1.27写文件设置FILE*fopen(constchar*pathname,constchar*mode)//打开文件返回值返回file指针,本质是结构体指针(赋值给FILE变量)//NULL函数使用pathname路径,mode模式moder可读r+可读可写w可写w+可读可写,新建文件a可写,追加a+......
  • 无涯教程-Socket.IO - 应用示例
    创建一个名为app.js的文件,然后输入以下代码来设置快速应用程序-varapp=require('express')();varhttp=require('http').Server(app);app.get('/',function(req,res){res.sendfile('index.html');});http.listen(3000,function(){conso......
  • jax框架为例:求hession矩阵时前后向模式的自动求导的性能差别
    注意:本文相关基础知识不介绍。给出代码:fromjaximportjacfwd,jacrevimportjax.numpyasjnpdefhessian_1(f):returnjacfwd(jacrev(f))defhessian_2(f):returnjacfwd(jacfwd(f))defhessian_3(f):returnjacrev(jacfwd(f))defhessian_4(f):ret......
  • Part 3:为什么 NetOps 是通往 AIOps 的桥梁
    转载网络运营(或NetOps)团队,传统上使用性能监控工具来管理企业网络的运行状况和性能。然而,网络使用量的增长加上分散的网络部署,导致许多人寻求替代的性能监控方法,包括使用人工智能进行IT运营(AIOps)。本文比较了NetOps实践中的传统性能监控方法,并讨论了团队最终转向采用AIOps的原......
  • 洛谷题解-P1673 [USACO05FEB] Part Acquisition S
    https://www.luogu.com.cn/problem/P1673题目描述奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤5×104)N(1\leN\le5\times10^4)N(1≤N≤5×104)颗行星,在行星上进行交易。为了方便,奶牛们已经给可能出现的K(1≤K≤103)K(1\leK\le10^3)K(1≤K≤103)......
  • 无涯教程-Socket.IO - 环境
    要开始使用Socket.IO进行开发,您需要安装Node和npm(节点程序包管理器)。如果您没有这些,请转到节点设置,以在本地系统上安装节点。通过在终端中运行以下命令来确认已安装节点和npm。node--versionnpm--version您应该得到类似于以下内容的输出:v17.3.08.3.0打开终端,并在......
  • 2019-2020 ICPC Southwestern European Regional Programming Contest (SWERC 2019-20
    Preface这场总体打的不错,虽然最后RushL题失败,没有想到关键优化导致没卡过去有点可惜,但奈何徐神还是太C了最后10题下班,赛后祁神发现L关键优化10min改完就过了,同时赛中徐神也看出了E的做法,感觉这场时间充足甚至有AK的可能的说A.Environment-FriendlyTravel很典的一个题,不难......
  • Solution Set【2024.1.27】
    CF1778FMaximizingRoot首先不难证明不操作根节点一定不优,因此我们考虑操作根节点的情况。现在我们的问题转化为了:最大化操作根节点前的整个树的节点权值的最大公约数。由于可能的最大公约数值只有\(\mathcal{O}(\sqrt{V})\)种。因此我们考虑将其压入状态进行动态规划。设......
  • simulation roadmap
    thenextstepwouldbedevelopinganewmodellanguage.SIMANPegden,C.D.,IntroductiontoSIMAN,WinterSimulationConference1983.https://informs-sim.org/wsc83papers/1983_0004.pdfSturrock,D.T.,Pegden,C.D.,IntroductiontoSIMAN,ProceedingsWinte......