加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.js 2.15 KB
一键复制 编辑 原始数据 按行查看 历史
zengmumu 提交于 2023-06-01 09:14 . 09班项目
/* 导入工具包 */
// 导入express 并创建了express实例app
var app = require('express')();
// 导入express
var express = require('express');
// 导入内置http服务,使用app实例
var http = require('http').Server(app);
// 到scoket.io 启动scoket服务器
var io = require('socket.io')(http);
/* 启动web服务器,定义静态文件夹*/
// 访问/ 返回一段html文本
app.get('/', function(req, res){
res.send('<h1>你好http</h1>');
});
// 使用静态目录public
app.use(express.static('public'))
// 定义所有的在线用户集合
var onlineUsers = {};
// 所有的在线用户数量
var onlineCount = 0;
/* 处理聊天信息 */
io.on('connection', function(socket){
console.log('a user connected');
// 当监听到用户的登录事件时候
socket.on('login', function(obj){
//动态scoket.name 为传入事件参数obj 的userid
socket.name = obj.userid;
// 如果当前用户不在 用户列表列表
if(!onlineUsers.hasOwnProperty(obj.userid)) {
// 添加当前用户到用户列表
onlineUsers[obj.userid] = obj.username;
// 数量加1
onlineCount++;
}
// 发送一个登录事件,事件值为一个对象包含用户列表,和在新人数,当前用户
io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
console.log(obj.username+'加入了聊天室');
});
// 当监听用户断开连接
socket.on('disconnect', function(){
// 如果有这个用户
if(onlineUsers.hasOwnProperty(socket.name)) {
var obj = {userid:socket.name, username:onlineUsers[socket.name]};
// 移除用户列表
delete onlineUsers[socket.name];
// 用户总数量减一
onlineCount--;
// 发送注销事件
io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
console.log(obj.username+'退出了聊天室');
}
});
// 当监听用户发送message事件
socket.on('message', function(obj){
// 向所有用户发送message事件
io.emit('message', obj);
console.log(obj.username+'说:'+obj.content);
});
});
/* 启动服务器 默认是5050端口 */
http.listen(process.env.PORT || 5050, function(){
console.log('listening on *:5050');
});
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化