整个代码结构很明了, 一个启动server.js,一个socket.js, 剩下的就是页面的js,和css。

服务端代码很简单,大概几十行。

/************************************************************/

server.js

-------------------------

let express = require('express');
let app = express();
app.use(express.static(__dirname + '/client'));
// 监听3000端口
const server = app.listen(3000, function () {
const host = server.address().address;
const port = server.address().port;
console.log('http://%s:%s', host, port, ',启动成功');
});
const socket = require('./socket');
socket(server);

/************************************************************/

socket.js

-------------------------

module.exports = (server) => {
let io = require('socket.io')(server);
/**
* 在线人员
*/
let onLineUsers = {};
/**
* 在线人数
*/
let onLineCounts = 0;
/**
* io监听到存在链接,此时回调一个socket进行socket监听
*/
io.on('connection', function (socket) {
console.log('a user connected');
/*监听新用户加入*/
socket.on('login', function (user) {
//暂存socket.name 为user.userId;在用户退出时候将会用到
socket.name = user.userId;
/*不存在则加入 */
if (!onLineUsers.hasOwnProperty(user.userId)) {
//不存在则加入
onLineUsers[user.userId] = user.userName;
onLineCounts++;
}
/**
* 一个用户新加入,向所有客户端监听login的socket的实例发送响应,响应内容为一个对象
*/
io.emit('login', {
onLineUsers: onLineUsers,
onLineCounts: onLineCounts,
user: user
});
console.log(user.userName, "加入了聊天室"); //在服务器控制台中打印么么么用户加入到了聊天室
});
/**
* 监听用户退出聊天室*
*/
socket.on('disconnect', function () {
if (onLineUsers.hasOwnProperty(socket.name)) {
let user = {
userId: socket.name,
userName: onLineUsers[socket.name]
};
delete onLineUsers[socket.name];
onLineCounts--;
/**
* 向所有客户端广播该用户退出群聊
*/
io.emit('logout', {
onLineUsers: onLineUsers,
onLineCounts: onLineCounts,
user: user
});
console.log(user.userName, "退出群聊");
}
})
/*监听到用户发送了消息,就使用io广播信息,信息被所有客户端接收并显示。注意,如果客户端自己发送的也会接收到这个消息,故在客户端应当存在这的判断,是否收到的消息是自己发送的,故在emit时,应该将用户的id和信息封装成一个对象进行广播*/
socket.on('message', function (obj) {
/*监听到有用户发消息,将该消息广播给所有客户端*/
io.emit('message', obj);
console.log(obj.userName, "说了:", obj.content);
});
});
}

github地址:

https://github.com/chenzezhang/NodeSockio

欢迎大家多多提

node + express + sockio 在线聊天室相关推荐

  1. vue.js+node.js+mysql在线聊天室源码

  2. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

  3. 云信小课堂|搭建应用级别在线聊天室,7步就够了!

    Vol. 6 从2000年至今,聊天室一直活跃在人们的各种生活场景中,目前广泛运用于超级小班课.互动大班课.连麦开黑.主播 PK 等场景,还具备文本.表情.点赞.撒花等互动方式,架起沟通桥梁的同时,玩 ...

  4. 基于Server-Sent Event的简单在线聊天室

    一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览 ...

  5. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍一文之中我们对AgileEAS.NET S ...

  6. php 开发一个聊天系统,ajax+php 实现一个简单的在线聊天室功能(附带源码)

    通过ajax和setInterval()函数,配合php+mysql实现一个简单的在线聊天室的功能.附带详细源码案例.这个聊天室是一个简单的聊天室,通过javascript setInterval() ...

  7. YShout一款PHP+TXT+Ajax嵌入式在线聊天室源码

    简介: YShout是一款PHP+TXT+AJAX开发嵌入式在线聊天室源码,UTF-8编码. 可以非常方便的嵌入到的你的网站中,无需数据库,采用TXT存储数据,小巧灵活,移植方便.采用AJAX技术,增 ...

  8. PHP匿名在线聊天室系统源码 自适应PC+WAP端

    介绍: PHP匿名在线聊天室系统源码 自适应PC+WAP端 可发语音.图片 修改数据库config\settings.php可拿去搭建专门跟客户聊天的网站 网盘下载地址: http://kekewl. ...

  9. JAVA实现在线聊天室(层层递进)

    - 本文讲述了从实现单个多个客户的收发信息(基础简易版),到各种实现代码的封装(oop版),实现群聊(群聊过渡版),到最后实现私聊(终极版)的过程 - 本文内容是在初步学习网络编程时,练习强化记忆时的 ...

最新文章

  1. Python自定义函数的创建、调用和函数的参数详解
  2. 2011软件设计大赛
  3. 径向基神经网络(实例故障分类)
  4. Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
  5. Halcon: 畸变矫正与标定(1)
  6. jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程
  7. 著名数学大师丘成桐:我们为什么要读数学科普书
  8. 7-4 特殊数字 (10 分)
  9. python设计模式21-策略模式
  10. 磁盘阵列数据恢复_raid5硬盘离线数据恢复步骤_HP-lefthand存储详解
  11. 小程序canvas输出gif格式的图片作为表情
  12. 计算机组成原理课程设计基于cop2000
  13. 【数学】欧拉恒等式:史上最完美的数学公式,没有之一!
  14. amCharts 5.2.31 Crack
  15. 电大计算机C语言1253,1253《C语言程序设计》电大期末精彩试题及其问题详解
  16. 打开计算机网络自动连接怎么回事,win10系统电脑连接宽带后会自动打开Bing网页怎么办...
  17. oracle找回删除的数据
  18. 我的世界java版如何装mod_我的世界MOD怎么安装 MOD最简单安装方法
  19. C# AForge设置摄像头参数(含代码)
  20. 程序员伤不起的 30 岁

热门文章

  1. Linux下静态库.a与.so库文件的生成与使用
  2. python 原理 pdf_《深入浅出深度学习:原理剖析与Python实践》.pdf
  3. android4.0教程,图文教程现身,在Win7等系统里跑起Android4.0
  4. 浙大python判断两个字符串是否为变位词_算法2----------变位词
  5. Map<String, Object> map=new HashMap<String, Object>();
  6. sourcetree提示无效路径_关于今明可转债申购的温馨提示
  7. python版本切换_电脑上安装两个版本的python时,迅速切换环境
  8. pythonweb项目源码下载_最新Python WEB开发在线教育项目之谷粒教育 软件源码齐全...
  9. java8 方法引用好处_Java 8方法引用
  10. connot+connect+mysql+127.0.0.1_无法远程连接 MySQL 的解决方法