多聊天室(多個分組)的簡單設計概述
後端設計
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’); 通知分組內的用戶不包括自己