re1*_*man 36 javascript node.js socket.io
我现在有这个代码设置缺口和房间:
io.sockets.on('connection', function(client){
var Room = "";
client.on("setNickAndRoom", function(nick, fn){
client.join(nick.room);
Room = nick.room;
client.broadcast.to(Room).emit('count', "Connected:" + " " + count);
fn({msg :"Connected:" + " " + count});
});
Run Code Online (Sandbox Code Playgroud)
我想知道我怎么能得到有多少人连接到一个特定的聊天室......比如Room.length
客户端 :
function Chat(){
this.socket = null;
this.Nickname = "";
this.Room = "";
var synched = $('#syncUp');
this.Connect = function(nick, room){
socket = io.connect('http://vybeing.com:8080');
Nickname = nick;
Room = room;
//conectarse
socket.on('connect',function (data) {
socket.emit('setNickAndRoom', {nick: nick, room: room}, function(response){
$("#connection").html("<p>" + response.msg + "</p>");
});
});
}
Run Code Online (Sandbox Code Playgroud)
我找到了这个,但它给出了undefined:
count = io.rooms[Room].length;
Run Code Online (Sandbox Code Playgroud)
kdb*_*man 89
对于socket.io版本> = 1.0:
请注意,房间变为具有.length1.4属性的实际类型,因此1.4.x方法从现在开始应该是稳定的.
计算连接到的所有客户'my_room':
1.4+:
var room = io.sockets.adapter.rooms['my_room'];
room.length;
Run Code Online (Sandbox Code Playgroud)
1.3.x的:
var room = io.sockets.adapter.rooms['my_room'];
Object.keys(room).length;
Run Code Online (Sandbox Code Playgroud)
1.0.x到1.2.x:
var room = io.adapter.rooms['my_room'];
Object.keys(room).length;
Run Code Online (Sandbox Code Playgroud)
这假设您在单个节点(而不是群集)上运行默认的房间适配器.如果你在一个集群中,情况会更复杂.
其他相关例子:
计算连接到服务器的所有客户端
var srvSockets = io.sockets.sockets;
Object.keys(srvSockets).length;
Run Code Online (Sandbox Code Playgroud)计数连接到命名空间的所有客户端'/chat':
var nspSockets = io.of('/chat').sockets;
Object.keys(nspSockets).length
Run Code Online (Sandbox Code Playgroud)Sơn*_*yễn 27
如果您使用的是版本<1,
var clients = io.sockets.clients(nick.room); // all users from room
对于socket.io 1.4.6,对我来说有用的是指定除了房间之外的命名空间.使用默认命名空间时,您只需将其指定为['/'].例如,要在默认命名空间(nsps)中获取连接到房间"厨房"的客户端数量,您可以编写:
var io = require('socket.io')();
io.nsps['/'].adapter.rooms['kitchen'].length
Run Code Online (Sandbox Code Playgroud)
抬头:如果没有人加入房间,它尚未创建,因此io.nsps['/'].adapter.rooms['kitchen']将返回undefined.如果您尝试呼叫.length未定义的厨房,您的应用程序将崩溃.
小智 5
在1.4.5版中
var clientNumber = io.sockets.adapter.rooms[room].length;
Run Code Online (Sandbox Code Playgroud)
我想获取房间中的用户列表。这最终成为我的解决方案。
我向套接字添加了一个用户名属性,但为了完整起见,我将其更改为“id”,即套接字的 id。
var sockets = io.in("room_name")
Object.keys(sockets.sockets).forEach((item) => {
console.log("TODO: Item:", sockets.sockets[item].id)
})
Run Code Online (Sandbox Code Playgroud)
Socket.io v2.0.3
| 归档时间: |
|
| 查看次数: |
39322 次 |
| 最近记录: |