基于nodejs+webSocket的聊天室(实现:加入聊天室、退出聊天室、在线人数、在线列表、发送信息、接收信息)
1 安装 socket.io模块 npm install
"socket.io": "latest"
2 app.js相关
ws = require('socket.io'); //依赖该模块
let server = http.createServer(app).listen(300); //将服务器赋值给变量
let io = ws(server);
io.on('connection', function (socket) { //服务器监听'connection'
console.log(socket);
}
3 在创建 public/chat.html
<!--引入的原因:当websocket服务不能用时使用ajax轮查询继续通信-->
<script src="socket.io.min.js"></script> <script>
io.connect('/'); //客户端发起 connect连接
</script>
4 浏览器打开chat.html页面

5
说明websocket通信建立连接成功
6 开始(搞)做(事)聊天室
7 服务器端代码
let userList = {},
usernum = 0;
io.on('connection', function (socket) {
socket.on('msg', function (data) { //接收前端发送过来的聊天内容
//console.log(data);
//把有前台发来的内容广播出去
io.emit('chat', data);
});
socket.on('login', function (data) { //服务端监听消息名为login的通信 通过回调函数反应给浏览器
userList[data.userid] = data.name; //给对象userList添加内容
socket.name = data.name; //保留客户端发来的该用户username
socket.userid = data.userid; //保留客户端发来的该用户的userid
usernum++;//登录一个用户+1
data.num = usernum; //给data添加一个num属性并赋值
//console.log(usernum);
io.emit('login',{data:data, userList:userList}); //把加入聊天室的人广播出去
});
// disconnect 退出触发的事件
socket.on('disconnect', function(){
delete userList[socket.userid];//删除退出的用户
usernum--;
console.log(usernum);
io.emit('logout',{name:socket.name, num:usernum, userList:userList});
});
})
8 前台页面代码 --使用jquery库
用户名:<input type="text" class="name"> <button class="join" onclick="Chat.login()">进入聊天室</button>
<div id="con"></div>
<input type="text" class="send-con"><button onclick="Chat.submit()" class="send">发送</button>
<div class="num"></div>
<div class="userlist"></div> <!--引入的原因:当这个服务不能用时使用ajax轮查询继续通信-->
<script src="socket.io.min.js"></script>
<script>
const Chat = {
joinBtn: $('.join'),
sendMsgBtn: $('.send'),
usename: null, //保存用户登录时输入的用户名
userid: null, //保存用户登录时候的id
socket: null, //保存 WebSocket服务
init: function(username){ //初始化
this.socket = io.connect('/'); //客户端发起 connect连接
this.username = username; //给用户名赋值
this.userId = new Date().getTime() +''+ Math.floor(Math.random()*899+100);
this.socket.emit('login', {name: this.username, userid:this.userId}); //向服务端提交名为'login'的信息
this.socket.on('login', function(data){ //监听名为'login'由服务端发来的信息
Chat.updateSystemMsg(data, 'login'); //?? Chat
//console.log(this);
});
//服务端发来'logout'退出信息时
this.socket.on('logout', function(data){
Chat.updateSystemMsg(data, 'logout');
});
//服务端发来 chat的聊天消息
this.socket.on('chat', function(data){
//console.log(data);
Chat.updateSystemMsg(data, 'chat');
});
},
updateSystemMsg: function(data, action){
let $con = $('#con'),
html = $con.html(),
$userList = $('.userlist'),
userList = '',
$num = $('.num'),
numList = $num.html();
//console.log(data);
if(action === 'login'){ //当是登录时候
html += `<p>${data.data.name}进入了聊天室`;
numList = `当前在线人数${data.data.num}`;
$userList.empty();
for(let i in data.userList){
userList += `<p>${data.userList[i]}</p>`;
};
$userList.html('<h3>当前在线列表:</h3>'+userList);
$num.html(numList);
}else if(action === 'logout'){ //当是退出的时候
//console.log(this.username);
html += `<p>${data.name}退出了聊天室`;
numList = `当前在线人数${data.num}`;
$userList.empty();
for(let i in data.userList){
userList += `<p>${data.userList[i]}</p>`;
};
$userList.html('<h3>当前在线列表:</h3>'+userList);
$num.html(numList);
}else if(action === 'chat'){
html += `<p>${data.username}:${data.content}</p>`;
}
$con.html(html);
},
submit: function(){ //发送信息
let $sendMsgInp = $('.send-con'),
sendCon = $sendMsgInp.val();
if(sendCon){ //信息输入框输入的有内容
this.socket.emit('msg', {username:this.username, content:sendCon}); //发送 msg
}else{
alert('发送的内容不能为空');
}
},
login: function(){ //加入聊天室
const $name = $('.name').val();
$name && this.init($name); //$name不为空时 执行后面语句
} }
</script>
基于nodejs+webSocket的聊天室(实现:加入聊天室、退出聊天室、在线人数、在线列表、发送信息、接收信息)的更多相关文章
- nodejs+websocket制作聊天室视频教程
本套教程主要讲解了node平台的安装,node初级知识.node 服务器端程序响应http请求,通过npm安装第三方包,websocket即时通讯.聊天页面界面制作.拖动原理.拖动效果.遮罩效果.定位 ...
- 利用socket.io实现多人聊天室(基于Nodejs)
socket.io简单介绍 在Html5中存在着这种一个新特性.引入了websocket,关于websocket的内部实现原理能够看这篇文章.这篇文章讲述了websocket无到有,依据协议,分析数据 ...
- 基于 nodejs 的 webSockt (socket.io)
基于 nodejs 的 webSockt (socket.io) 理解 本文的业务基础是在基于 nodejs 的 socket.io 的直播间聊天室(IM)应用来的. 项目中具体的 框架如下 expr ...
- 转-基于NodeJS的14款Web框架
基于NodeJS的14款Web框架 2014-10-16 23:28 作者: NodeJSNet 来源: 本站 浏览: 1,399 次阅读 我要评论暂无评论 字号: 大 中 小 摘要: 在几年的时间里 ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- 浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。
本文版权桂博客园和作者吴双共同所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/p/6016055.html 写在前面 大家好我是博客园的蜗牛,博客园的蜗牛就是我 ...
- 基于NodeJS的全栈式开发
前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的 NodeJS,试 ...
- 基于Nodejs生态圈的TypeScript+React开发入门教程
基于Nodejs生态圈的TypeScript+React开发入门教程 概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...
- (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/ 随着不同终端(pad/mobile/pc)的兴起 ...
随机推荐
- spring事务详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt122 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式 ...
- 第1阶段——u-boot分析之make指令(2)
通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本文学习目标: 对Makefile文件进行基本了解,掌握make指令是怎么实现生成 ...
- Spring MVC 解决无法访问静态文件和"全局异常处理"
我们都知道,Spring MVC的请求都会去找controller控制器,若果我们页面中引入了一个外部样式,这样是没效果的, 我们引入样式的时候是通过<like href="...&q ...
- Java线程:线程栈模型
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型. 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶.线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运 ...
- 团队作业4--第一次项目冲刺(Alpha版本) 4
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 完成对查重结果的写出与保存,将查重结果写出并导出保存为Excel形式 四.困难与问题 对查重结果的保存,当有多份文档进行比较的 ...
- [BT5]信息收集1-2 Dnsmap
0.工具介绍 dnsmap is mainly meant to be used by pentesters during the information gathering/enumeration ...
- Intellij IDEA WEB结构目录说明【转载】
https://my.oschina.net/lujianing/blog/186737?p=1#OSC_h2_1
- Oracle函数之chr
chr()函数将ASCII码转换为字符:字符 –> ASCII码:ascii()函数将字符转换为ASCII码:ASCII码 –> 字符: 在oracle中chr()函数和ascii()是一 ...
- HttpServletRequest获取URL、URI
从Request对象中可以获取各种路径信息,以下例子: 假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种路径信息如下 import j ...
- JSP获取Cookie对象
cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的.通过使用cookie可以标识用户身份,记录用户和密码,跟踪重复用户等.浏览器将cookie以key/value的形式保存到客户机的某 ...