我现在有这个代码设置缺口和房间:
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 …
Run Code Online (Sandbox Code Playgroud) 我在NodeJS,socketIO和Express中创建了一个具有不同聊天室的聊天客户端.我试图在每个房间的连接用户上显示更新列表.
有没有办法将用户名连接到对象,所以当我这样做时,我可以看到所有用户名:
var users = io.sockets.clients('room')
Run Code Online (Sandbox Code Playgroud)
然后做这样的事情:
users[0].username
Run Code Online (Sandbox Code Playgroud)
我还能以其他方式做到这一点?
解决了: 这有点重复,但解决方案并没有在任何地方写得很清楚,所以我想我在这里写下来.这是由Andy Hin解决的帖子,由mak回答.还有这篇文章中的评论.
只是为了让事情更清楚一些.如果要在套接字对象上存储任何内容,可以执行以下操作:
socket.set('nickname', 'Guest');
Run Code Online (Sandbox Code Playgroud)
套接字也有一个get方法,所以如果你想让所有的用户都这样做:
for (var socketId in io.sockets.sockets) {
io.sockets.sockets[socketId].get('nickname', function(err, nickname) {
console.log(nickname);
});
}
Run Code Online (Sandbox Code Playgroud)
正如alessioalex指出的那样,API可能会发生变化,并且自己跟踪用户会更安全.您可以通过在断开连接时使用套接字ID来实现此目的.
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function() {
console.log(socket.id + ' disconnected');
//remove user from db
}
});
Run Code Online (Sandbox Code Playgroud) 我可以在socket.io 0.9中使用此代码获取room的客户列表.
io.sockets.clients(roomName)
Run Code Online (Sandbox Code Playgroud)
我怎么能在socket.io 1.0中这样做?
我正在尝试在特定房间中显示客户列表.我只想显示他们的用户名,而不是他们的套接字ID.
我在这里:
socket.set('nickname', "Earl");
socket.join('chatroom1');
console.log('User joined chat room 1);
var roster = io.sockets.clients('chatroom1');
for ( i in roster )
{
console.log('Username: ' + roster[i]);
}
Run Code Online (Sandbox Code Playgroud)
没有任何运气让它列出套接字ID或任何东西.希望它能够返回昵称.
是否可以对位于A房间和B房间的名称空间的所有用户进行socket.io广播,而不是那些只在A房间或B房间的用户?
如果没有,我将如何自己实施?有没有办法检索位于给定房间的命名空间中的所有用户?
我在节点中使用socket.io 1.0
编辑:如果没有本机方法,我将如何创建自己的语法,如:
socket.broadcast.in('room1').in('room2').emit(...)
?
io.sockets.on('connection', function(socket) {
socket.object = socket.id;
socket.on('updateObject', function(data) {
// How to update socket.object here for all clients?
});
});
Run Code Online (Sandbox Code Playgroud)
怎么做?
我想知道Socket.io是否会在内部进行簿记并允许用户检索客户列表,或者我们是否需要手动跟踪连接客户端列表,如下所示:
var Server = require('socket.io');
var io = new Server(3980, {});
const clients = [];
io.on('connection', function (socket) {
clients.push(socket);
socket.on('disconnect', function () {
clients.splice(clients.indexOf(socket),1);
});
});
Run Code Online (Sandbox Code Playgroud)
socket.io存储连接列表,如下所示:
io.connections
Run Code Online (Sandbox Code Playgroud)
要么
io.sockets
Run Code Online (Sandbox Code Playgroud)
对于较新版本的socket.io,遇到的麻烦比我预期的要多.我正在使用version => "socket.io": "^1.7.2"
如何断开/关闭服务器端的所有套接字?
也许从服务器端重新启动socket.io模块?
(使用lateste socket.io)
我正在尝试使用 Node.js + soket.io 发送通知
在客户端,我发送到服务器收听
socket.emit('send to server',{user_id:user_id,other_stuff:other_stuff})
Run Code Online (Sandbox Code Playgroud)
节点上
socket.on('send to server',function(date){ socket.emit('notification_'+user_id,'test data'); });
Run Code Online (Sandbox Code Playgroud)
在客户端收听通知
socket.on("notification_<?php echo $_SESSION['user_id'];?>",function(date){alert(data)});
Run Code Online (Sandbox Code Playgroud)
问题是它不会向其他用户发送通知
如果我在发出“发送到服务器”期间传递我自己的 user_id,那么它会返回给我自己,但如果使用其他 user_id(登录其他浏览器的用户),它不会向该用户发送任何内容。
请指出我如何在发生某些操作时向不同的用户发送通知。
我目前有一个项目,我必须在其中使用nodejs
和开发基于网络的棋盘游戏socket.io
。问题是,我直接从 Android 开发跳到了 Web 开发,所以我在理解概念方面遇到了一些问题。
我已经实现了一些代码,其中客户端连接到服务器 ( app.js
)、发送消息、接收消息等。我还添加了一个小聊天窗口供玩家聊天。它的工作。我对发送消息和加入房间的东西有了粗略的想法。
问题是,我不确定如何充分利用socket
用户连接时服务器收到的对象。我应该将该对象保存在socket
某处以备将来使用吗?或者我只是将用户添加到房间,因此可以向单个用户发送消息并且不关心将套接字保存到变量?socket
在这个项目的未来开发中,我需要再次使用该对象来做某些事情的机会有多大?我确实在控制台中输出了套接字对象以查看它包含哪些信息,但是,这对我来说太难理解了。
我基本上写了这段代码:
socket.on('disconnect', function (socket) {
var remove_id = usersonline.indexOf(socket.user);
usersonline.splice(remove_id, 1);
socket.broadcast.emit('usergone', {
'left_user' : socket.username
});
});
Run Code Online (Sandbox Code Playgroud)
这是服务器端,这是客户端:
socket.on('usergone', function(data){
var old_user = data['left_user'];
console.log(old_user);
$(old_user).remove();
});
Run Code Online (Sandbox Code Playgroud)
然而它并没有消失,我测试了它不执行客户端代码,我猜这意味着它没有到达它。
有任何想法吗?
基本上我正在构建聊天应用程序。到目前为止,它工作正常,当用户加入时,他们会被添加到用户在线列表等...但是当用户离开时 - 我无法找到方法告诉所有其他在线用户该用户已离开并将其从用户在线列表/选项卡中删除。
我正在使用以下命令创建套接字连接:
var http = require('http'),
express = require('express'),
app = express(),
jade = require('jade'),
io = require('socket.io'),
server = http.createServer(app);
io = io.listen(server);
server.listen(3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", { layout: false });
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res){
res.render('home.jade');
});
var usersonline …
Run Code Online (Sandbox Code Playgroud)