node的依赖包

node中实现Websocket的依赖包有很多,websocket、ws均可,本文选取ws来实现,首先安装依赖
npm install ws
聊天室实例
假如A,B,C,D用户均通过客户端连接到Websocket服务,其中每个人发的消息都需要将其通过Websocket转发给其他人,此场景类似于服务端将A的消息广播给组内其他用户。
服务端实现
首先来看服务端程序,具体的工作流程分以下几步:
服务端代码
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({port: 8080});
// 连接池
var clients = [];
wss.on('connection', function(ws) {
// 将该连接加入连接池
clients.push(ws);
ws.on('message', function(message) {
// 广播消息
clients.forEach(function(ws1){
if(ws1 !== ws) {
ws1.send(message);
}
})
});
ws.on('close', function(message) {
// 连接关闭时,将其移出连接池
clients = clients.filter(function(ws1){
return ws1 !== ws
})
});
});
客户端实现
<html>
<input type="text" id="text">
<input type="button" onclick="sendMessage()" value="online">
<script>
var ws = new WebSocket("ws://localhost:8080");
ws.onopen = function (e) {
console.log('Connection to server opened');
}
ws.onmessage = function(event) {
console.log('Client received a message', event);
};
ws.onclose = function (e) {
console.log('connection closed.');
}
function sendMessage() {
ws.send(document.getElementById('text').value);
}
</script>
</html>
如何发现用户?
通过上述的demo可以看到,WebSocket都是基于连接的,也就是说我们知道data是从那个connection发过来,但并不知道使用客户端的是李雷或者韩梅梅,这可如何是好?再想另一种场景,李雷只想给韩梅梅发消息,不想将消息广播给其他客户端,此时我们就需要在Server端能够标识用户身份和连接的对应关系。
于是,需要在客户端连接到WebSocket之后,紧接着再发一次请求,告诉Server我的user_id是多少,Server将此user_id与connection之间的关系存储在hashmap中,至此就建立了user_id与connection的对应关系。当需要发送消息给对应的客户端,从此hashmap中取出对应用户的connection信息,调用其send方法发出消息即可。
依赖包
npm install hashmap
服务端实现
var WebSocketServer = require('ws').Server, webSocketServer = new WebSocketServer({port: 8080});
var HashMap = require('hashmap');
// record the client
var userConnectionMap = new HashMap();
var connectNum = 0;
// connection
webSocketServer.on('connection', function(ws) {
++ connectNum;
console.log('A client has connected. current connect num is : ' + connectNum);
ws.on('message', function(message) {
var objMessage = JSON.parse(message);
var strType = objMessage['type'];
switch(strType) {
case 'online' :
userConnectionMap.set(objMessage['from'], ws);
break;
default:
var targetConnection = userConnectionMap.get(objMessage['to']);
if (targetConnection) {
targetConnection.send(message);
}
}
});
ws.on('close', function(message) {
var objMessage = JSON.parse(message);
userConnectionMap.remove(objMessage['from']);
});
});
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# nodejs
# websocket
# nodejs实现websocket
# node
# 如何用JS WebSocket实现简单聊天
# js实现mp3录音通过websocket实时传送+简易波形图效果
# 原生nodejs使用websocket代码分享
# node.js基于express使用websocket的方法
# JS实现websocket长轮询实时消息提示的效果
# nodejs+websocket实时聊天系统改进版
# websocket+node.js实现实时聊天系统问题咨询
# Node.js websocket使用socket.io库实现实时聊天室
# Javascript WebSocket使用实例介绍(简明入门教程)
# 详解JS WebSocket断开原因和心跳机制
# 客户端
# 服务端
# 连接池
# 将该
# 将其
# 连接到
# 的是
# 都是
# 移出
# 有很多
# 遍历
# 是从
# 可以看到
# 均可
# 几步
# 将此
# 来实现
# 类似于
# 这可
# 便将
相关文章:
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何在香港免费服务器上快速搭建网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
北京网站制作的公司有哪些,北京白云观官方网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
建站之星导航配置指南:自助建站与SEO优化全解析
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
建站之星logo尺寸如何设置最合适?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
简历在线制作网站免费版,如何创建个人简历?
电商网站制作公司有哪些,1688网是什么意思?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
济南网站制作的价格,历城一职专官方网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
Android自定义listview布局实现上拉加载下拉刷新功能
如何通过VPS建站实现广告与增值服务盈利?
如何通过PHP快速构建高效问答网站功能?
如何在香港服务器上快速搭建免备案网站?
如何用AWS免费套餐快速搭建高效网站?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
如何快速生成专业多端适配建站电话?
网站制作难吗安全吗,做一个网站需要多久时间?
如何通过智能用户系统一键生成高效建站方案?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
宝塔建站无法访问?如何排查配置与端口问题?
建站之星云端配置指南:模板选择与SEO优化一键生成
如何在云服务器上快速搭建个人网站?
内部网站制作流程,如何建立公司内部网站?
,巨量百应是干嘛的?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
建站之星展会模板:智能建站与自助搭建高效解决方案
建站之星如何快速解决建站难题?
定制建站如何定义?其核心优势是什么?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
建站之星在线版空间:自助建站+智能模板一键生成方案
如何高效完成独享虚拟主机建站?
如何通过二级域名建站提升品牌影响力?
实现虚拟支付需哪些建站技术支撑?
相册网站制作软件,图片上的网址怎么复制?
开心动漫网站制作软件下载,十分开心动画为何停播?
建站主机是否属于云主机类型?
如何高效配置香港服务器实现快速建站?
建站之星如何配置系统实现高效建站?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
*请认真填写需求信息,我们会在24小时内与您取得联系。