我正在尝试通过构建一组动态创建的聊天室来学习Socket.io,这些聊天室在用户进入和离开时会发出“已连接”和“已断开”消息。看着问题,我已经把一些功能,但大多数链接的响应是从谁承认自己已成功侵入一起答案的人,我已经注意到有一个更普遍的-和最近-
有关的权利的方式来讨论在Socket.io存储库上执行此操作(尤其是在此处和此处)
因为我是个新手,所以我不知道下面的工作是否是可以接受的处理方式,或者它只是偶然地起作用,但会导致性能问题或导致过多的侦听器。如果有一种理想且正式的方式来加入和离开房间,感觉比以前那么笨拙,我很乐意对此进行了解。
客户
var roomId = ChatRoomData._id // comes from a factory
function init() {
// Make sure the Socket is connected
if (!Socket.socket) {
Socket.connect();
}
// Sends roomId to server
Socket.on('connect', function() {
Socket.emit('room', roomId);
});
// Remove the event listener when the controller instance is destroyed
$scope.$on('$destroy', function () {
Socket.removeListener('connect');
});
}
init();
io.sockets.once('connection', function(socket){
socket.on('room', function(room){ // take room variable from client side
socket.join(room) // and join it
io.sockets.in(room).emit('message', { // Emits a status message to the connect room when a socket client is connected
type: 'status',
text: 'Is now connected',
created: Date.now(),
username: socket.request.user.username
});
socket.on('disconnect', function () { // Emits a status message to the connected room when a socket client is disconnected
io.sockets.in(room).emit({
type: 'status',
text: 'disconnected',
created: Date.now(),
username: socket.request.user.username
});
})
});
Socket.IO :最近发布的 v2.0.3
要 加入 一个房间一样简单socket.join('roomName'
)
//:JOIN:Client Supplied Room
socket.on('subscribe',function(room){
try{
console.log('[socket]','join room :',room)
socket.join(room);
socket.to(room).emit('user joined', socket.id);
}catch(e){
console.log('[error]','join room :',e);
socket.emit('error','couldnt perform requested action');
}
})
并 离开 房间,就这么简单socket.leave('roomName');
:
//:LEAVE:Client Supplied Room
socket.on('unsubscribe',function(room){
try{
console.log('[socket]','leave room :', room);
socket.leave(room);
socket.to(room).emit('user left', socket.id);
}catch(e){
console.log('[error]','leave room :', e);
socket.emit('error','couldnt perform requested action');
}
})
断开连接事件时无法获取客户端当前所在的房间列表
已修复(添加“断开连接”事件以在断开连接时访问socket.rooms)
socket.on('disconnect', function(){(
/*
socket.rooms is empty here
leaveAll() has already been called
*/
});
socket.on('disconnecting', function(){
// socket.rooms should isn't empty here
var rooms = socket.rooms.slice();
/*
here you can iterate over the rooms and emit to each
of those rooms where the disconnecting user was.
*/
});
现在发送到特定房间:
// sending to all clients in 'roomName' room except sender
socket.to('roomName').emit('event', 'content');
我使用的是socket.io/node.js/express。当我使用socket.join(“room”)加入socket.io房间时,它会注册该房间,但用户只加入“room”。 这个命令显示了所有的房间,它同时返回'room'和'',尽管我从未创建过'room: 任何帮助都将不胜感激,这是非常奇怪的行为:( 编辑:以下是相关的服务器代码
我正在使用Node.js、mongodb、Socket.io和Express实现一个聊天服务器。我想知道的是是否有一个最大的限制。同时开放房间的socket.io多房间聊天。 另外,是否有一个最大的不。每个房间的用户。
问题内容: 我正在尝试使用Socket.io v.7中的新“会议室”功能来创建动态聊天室,但是在我的示例中无法使静态会议室正常工作。用户根据URL选择应该以room1或room2结尾。用户在聊天室中输入的任何内容都应广播给同一房间的用户。我有2个浏览器(chrome和ff),每个浏览器都有一个打开到/ room1和/ room2的选项卡,但是我键入的内容似乎不会广播到其他选项卡。我究竟做错了什么?
问题内容: 在解决如何创建socket.io多播组的问题上取得进展之后,我发现将房间作为完成我需要的工作的好方法。 但是,很高兴知道所有房间,而无需额外的数据结构。 是否可以从服务器套接字获取服务器上所有房间的列表? 问题答案: 简短的答案: 我分析了: 我得到以下输出: 从单个客户加入“ public-alfred”会议室后,其中包含:
问题内容: 我想请你帮忙。我在socket.io的客户端上遇到了麻烦,我想在客户端调用此代码以在socket.io中创建一个房间: 我不知道这是否正确,如果不正确,请帮助我纠正这些家伙。我不是在节点js和套接字方面专业,但我已经阅读了他们的wiki。有没有可能创造空间的方法? 问题答案: 不需要创建Socket.IO中的房间,而是在套接字加入时创建一个房间。它们是在服务器端加入的,因此您必须指示服
我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com