我想在Socket.IO之上构建一个简单的聊天室系统,用户可以在其中创建一个新的聊天室,然后人们可以开始聊天。
这听起来很简单但是作为Socket.IO 0.9.4我现在正在运行,在阅读了一些SO帖子和socket.io上的文件后,我变得越来越困惑。所以,我希望有人可以向我提供与0.9.4一起使用的指令:
我需要一种订阅房间的方法。房间名称由用户选择。当消息在房间中发布时,用户应该接收消息。我该如何编写服务器代码,我该如何编写客户端代码?
用户可以同时加入多个房间。
我希望其他系统向某个房间的所有用户发送消息。这个“另一个系统”通过express处理的请求发送消息。我该如何编写该请求处理程序?
答案 0 :(得分:98)
使用socket.io房间功能非常简单。看看LearnBoost wiki上的文档。
https://github.com/LearnBoost/socket.io/wiki/Rooms
它允许通过单个插座连接到多个房间。我用以下代码组装了一个快速测试。
服务器强>
io.sockets.on('connection', function(socket){
socket.on('subscribe', function(room) {
console.log('joining room', room);
socket.join(room);
})
socket.on('unsubscribe', function(room) {
console.log('leaving room', room);
socket.leave(room);
})
socket.on('send', function(data) {
console.log('sending message');
io.sockets.in(data.room).emit('message', data);
});
});
<强>客户端强>
var socket = io.connect();
socket.on('message', function (data) {
console.log(data);
});
socket.emit('subscribe', 'roomOne');
socket.emit('subscribe', 'roomTwo');
$('#send').click(function() {
var room = $('#room').val(),
message = $('#message').val();
socket.emit('send', { room: room, message: message });
});
从Express路线发送消息也非常简单。
app.post('/send/:room/', function(req, res) {
var room = req.params.room
message = req.body;
io.sockets.in(room).emit('message', { room: room, message: message });
res.end('message sent');
});