多聊天室(多个分组)的简单设计概述
后端设计
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) {
var groupid = url.parse(socket.request.url,true).query.groupid;
socket.join(groupid);
socket.on('clientMsg',function(data){
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">
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’); 通知分组内的用户不包括自己