【发布时间】:2014-09-07 12:17:10
【问题描述】:
我有一个使用 express、angular、mongodb 和 socket.io 在用户属于组的节点上运行的 Web 应用程序。在这些组中,我需要设置一个聊天套接字,只有属于该组的人才能看到特定于该组的消息,并且只向该组中的其他用户发送消息。目前,我已经设法根据他们网站上的指南设置了 socket.io 聊天室,但发送的消息对所有其他组都是可见的。我读到我需要设置某些房间,但我不知道如何设置它以使房间特定于该组。
组在域中:例如... www.mydomain.com/groups/groupId/room
groupId 是由 MongoDB 生成的唯一 ID。我在客户端使用 Angularjs,并且有一个组控制器。如果有人对如何实现这一点有任何想法或可以指出正确的方向,我将不胜感激。
我当前的服务器端代码:
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
socket.on('connectToServer', function (data) {
var name = data.name;
io.sockets.emit('user-join', name + " has connected to the group");
});
socket.on('send msg', function (data) {
io.sockets.emit('get msg', data);
});
});
以及我在 groupController 中的客户端代码,其中我访问了一个存储当前用户详细信息的全局服务,如下所示:
var socket = io.connect();
$scope.msgs = [];
$scope.sendMsg = function () {
socket.emit('send msg', $scope.msg.text);
$scope.msg.text = "";
}
socket.on('get msg', function (data){
$scope.msgs.push(data);
});
var currentUser = Global.currentUser();
var name = currentUser.username;
socket.emit('connectToServer', {name: name});
socket.on('user-join', function (data) {
$scope.msgs.push(data);
});
【问题讨论】:
-
你应该让每个房间成为一个事件发射器。 code.tutsplus.com/tutorials/using-nodes-event-module--net-35941 要扩展到单个进程之外,您还可以考虑使用 redis。 github.com/mranney/node_redis#publish--subscribe