Socket.io教程: 基于Express的多聊天室(分组)的简单设计与实现(前端通过传参来自动分组)
多聊天室(多个分组)的简单设计概述
相当于实现多个群聊的功能
每个群之间互相不干扰
后端设计
var express = require('express'); var url = require('url'); var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); app.set('view engine','ejs'); app.use(express.static('public')); app.get('/',function(req,res){ res.render('index'); }) server.listen(3000,'127.0.0.1'); io.on('connection', function (socket) { // console.log('socket配置成功') // 获取客户端建立连接的时候传入的值 //console.log(socket.request.url); var groupid = url.parse(socket.request.url,true).query.groupid; // 获取分组号 //console.log(groupid); socket.join(groupid); // 加入分组 // 监听客户端发送的事件 socket.on('clientMsg',function(data){ //console.log(data) // 广播给指定分组的用户 发送消息 两种方式 // io.to(groupid).emit('serverMsg','Server Ok'); // 通知分组内的所有用户 包括自己 socket.broadcast.to(groupid).emit('serverMsg','Server Ok'); // 通知分组内的用户不包括自己 }) });
前端设计
<script src="http://127.0.0.1:3000/socket.io/socket.io.js"></script> <input type="button" value="发送消息" onclick="sendMsg()"> <script type="text/javascript"> // 和服务器建立长连接 多个分组传入不同groupid即可实现不同的分组 var socket = io.connect('http://127.0.0.1:3000?groupid=1'); // 接收服务器返回的信息 socket.on('serverMsg',function(data) { console.log(data); }); function sendMsg() { socket.emit('clientMsg','clientMsg'); } </script>
相关说明
不同客户端建立连接时传入不同的groupid即可实现分组, 分组内的通信是同步的,分组之间互不干扰(即前端通过传参来自动分组)
socket.join(groupid); 加入分组
io.to(groupid).emit(‘serverMsg’,‘Server Ok’); 通知分组内的所有用户 包括自己
socket.broadcast.to(groupid).emit(‘serverMsg’,‘Server Ok’); 通知分组内的用户不包括自己
————————————————
版权声明:本文为CSDN博主「Johnny丶me」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Tyro_java/article/details/106607010
本文来自博客园,作者:王晓升,转载请注明原文链接:https://www.cnblogs.com/xiaosheng1989/p/16478068.html