Я пишу простую программу chat.io (v1.3.6). Когда пользователи регистрируются с их именем пользователя, они могут видеть несколько комнат для бесед на приборной панели и вводить каждый из них через разные конечные точки, т. Е.Socket.IO - как получить разные активные списки пользователей для разных конечных точек/комнат?
http://localhost:8080/api/chats/room01
.
Пользователи могут общаться в любом из этих номеров. Для каждой комнаты я хотел бы создать активный список пользователей. «active» означает, что этот пользователь теперь подключен к сокету (в чате в этой комнате).
Я вижу, что многие вопросы были опубликованы, но все еще смущены их несколькими изолированными словами.
В моем нынешнем server.js я добавил этот код:
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('a user connected: ' + socket.id);
socket.on('disconnect', function(){
console.log(socket.id + ' has disconnected from the chat.');
});
});
Чтобы подвести итог, два вопроса:
Как я могу отличить гнездовые соединения для разных номеров/конечных точек?
Как я могу получить активные имена пользователей вместо
socket.id
, которые могут отличаться для одного и того же пользователя?
Большое спасибо.
Update:
Мой код на стороне сервера:
io.of('/rooms/room01').on('connection', function(socket) {
console.log("socket connected: ", socket.id);
//....some more codes
});
Мой клиентский код:
app.factory('socketio', ['$rootScope', function($rootScope) {
'use strict';
var socket = io.connect('http://localhost:8080/rooms/room01');
return {
on: function(eventName, callback) {
socket.on(eventName, function() {
var args = arguments;
$rootScope.$apply(function() {
callback.apply(socket, args);
});
});
},
emit: function(eventName, data, callback) {
socket.emit(eventName, data, function() {
var args = arguments;
$rootScope.$apply(function() {
if (callback) {
callback.apply(socket, args);
}
});
});
}
};
}]);
Приведенный выше код не работает. Но раньше, когда я использую пространство имен по умолчанию
io.of('/').on('connection', function(socket) {
//...
}
и
var socket = io.connect('http://localhost:8080/');
это хорошо работает. Не могли бы вы рассказать мне, почему?
Большое спасибо @ jfriend00 это идеальный ответ! – leonsPAPA
Я попытался использовать этот код и получил ошибку, поэтому я разместил здесь новый вопрос. Http://stackoverflow.com/questions/35249324/typeerror-list-foreach-is-not-a-function-in-socket-io – Mojtaba
@Mojtaba - Какая версия socket.io вы используете, потому что ваш выше код работает отлично для меня в моем собственном тестовом приложении, используя socket.io 1.3.6? – jfriend00