Socket.IO房间function

我有两个单独的文件,一个是服务器端JS。

另一个是dynamic生成的客户端PHP。

这两个文件能够通过Socket.IO成功地相互通信。

我知道我可以通过使用.of()来限制名称空间,但不能使用它

处理dynamic创build的聊天室。

所以我决定使用两者

.of('/chat') 

和房间的function

 .join('room name') 

我可以find服务器端的例子,并找不到客户端的例子。

以下是Socket.IO github中唯一给出的服务器端代码片段

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.join('justin bieber fans'); socket.broadcast.to('justin bieber fans').emit('new fan'); io.sockets.in('rammstein fans').emit('new non-fan'); }); 

1)我无法理解下面的部分。

 socket.broadcast.to('justin bieber fans').emit('new fan'); io.sockets.in('rammstein fans').emit('new non-fan'); 

这两者有什么区别?

2)为什么不使用

 socket.to('room name').emit('event') 

代替

 io.sockets.in('room name').emit('new non-fan'); 

3)最后,我find了一些使用的文档

 .send() 

代替

 .emit() 

有点.send()不适合我,我想知道这两者之间的区别。

谢谢,我很抱歉有关Socket.IO的多个问题。

相当一段时间我还没有使用Socket.IO,但是

1)正如文档所述:“广播意味着向除了启动它的套接字以外的其他人发送消息。 在使用Socket.IO代码进行一些search之后,可以查看/lib/socket.js中的Socket.prototye.packet。

当你第一次打电话时,你将用户设置为“贾斯汀·比伯球迷”房间,并为除sockets外的每个人播放“新粉丝”。 第二种情况是,你们正在向“拉姆斯坦球迷”中的每个人播放“新的非球迷”。

2.)在第一个电话中,您正在为单个用户发送“事件”,并向该单个房间发送消息。

在第二个电话中,你正在送给那个房间里的每个人。

3.)再一次看源代码,它们看起来很相似,除了socket.io协议接受3种不同types的消息 :“event”,“json”,“message”。 使用.send,您可以发送一个jsonstring或一条消息。 使用.emit,你将发送一个事件给客户端。 它没有太大的区别,它们几乎在内部处理相同,但是你应该使用最适合你的需求。

1) –

i)io.sockets.in()。emit():它向x房间中的所有人发出/派发自定义事件。 防爆;

 /* Send message to the room1. It broadcasts the data to all the socket clients which are connected to the room1 */ io.sockets.in('room1').emit('function', {foo:bar }); 

ii)socket.broadcast.to()。emit():我发送/派发一个自定义事件给除x发件人以外的所有人。 防爆;

 io.sockets.on('connection', function (socket) { socket.on('function', function(data){ /* Broadcast to room1 except the sender. In other word, It broadcast all the socket clients which are connected to the room1 except the sender */ socket.broadcast.to('room1').emit('function', {foo:bar}); } } 

2) –第一个,你发射/分配自定义事件到单个客户端(套接字一)。 第二个,你发送/派遣一个自定义事件到X房间的所有客户端。

3) – emit()和send()之间的区别

socket.emit():是一个函数,它向客户端发送/派发一个自定义事件。 socket.emit()至less需要两个参数,第一个是自定义事件名称,第二个参数是你想传递的数据。 防爆;

socket.emit('addUser',{nickname:'John'});

你可能需要注册并使用socket.on()来监听这个自定义事件。 例:

 socket.on('addUser',function(data){ console.log(data.nickname); // it will return 'John' } 

socket.send():与socket.emit()几乎相同,只是这次使用默认事件名称“message”。 所以它只需要一个参数,你想传递的数据。 例:

 socket.send('hi'); 

这次你注册并收听'消息'事件名称;

 socket.on('message', function (data) { console.log(data); // it will return 'hi' }) 

希望这会有所帮助!

我正在使用RedisStore的房间function。

正如你可以在Socket.io源文件中看到的那样。

房间function(Redis的订阅和取消订阅是用来实现该function)似乎

仅在使用RedisStore时可用,但不能与默认的memoryStore一起使用。

我已经发现

 {} 

join的空源,并在内存中。

所以我推荐使用RedisStore,他们希望将Socket.io集群集群化

在多个进程和多个服务器之间

也为了成功使用Socket.io的房间特性