Dzwebs.Net

撰写电脑技术杂文十余年

socket.io服务器传送信息

Admin | 2017-1-11 16:00:56 | 被阅次数 | 4248

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆
服务器信息传输

// send to current request socket client
socket.emit('message', "this is a test");

// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");

// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');

// sending to all clients, include sender
io.sockets.emit('message', "this is a test");

// sending to all clients in 'game' room(channel), include sender
io.sockets.in('game').emit('message', 'cool game');

// sending to individual socketid
io.sockets.socket(socketid).emit('message', 'for your eyes only');

上述集中方式为socket.io常用的数据传输方式,

io.sockets.on('connection', function (socket) {

});

回调函数的socket参数为一个 client 与服务器的连接标示,不同的 client 会有不同的连接标示。
不分组,数据传输

    socket.emit
    socket.emit 信息传输对象为当前 socket 对应的 client ,各个 client socket 相互不影响。

    socket.broadcast.emit
    socket.broadcast.emit 信息传输对象为所有 client ,排除当前 socket 对应的 client 。

    io.sockets.emit
    信息传输对象为所有 client 。

分组数据传输

类似于之前提过的 of 方法生成命名空间来管理用户, socket.io 可以使用分组方法, socket.join() ,以及与之对应的 socket.leave() 。

io.sockets.on('connection', function (socket) {
    socket.on('firefox', function (data) {
        socket.join('firefox');
    });
    socket.on('chrome',function(data){
        socket.join('chrome');
    });
});

假设有两个聊天室,一个名为firefox,另一个为chrome,客户端操作

socket.emit('firefox') ,就可以加入 firefox 聊天室;
socket.emit('chrome') ,就可以加入 chrome 聊天室;

向一个分组传输消息,有两种方式:

socket.broadcast.to('chrome').emit('event_name', data);
  //emit to 'room' except this socket client
io.sockets.in('chrome').emit('event_name', data)
  //emit to all socket client in the room

broadcast 方法允许当前 socket client 不在该分组内。

可能有一个疑问,一个 socket 是否可以同时存在于几个分组,等效于一个用户会同时在几个聊天室活跃,答案是”可以“, socket.join() 添加进去就可以了。官方提供了订阅模式的示例:

socket.on('subscribe', function(data) {
    socket.join(data.room);
})

socket.on('unsubscribe', function(data) {
    socket.leave(data.room);
 })

后台处理订阅/退订事件

socket = io.connect('http://127.0.0.1:1338/');
socket.emit('subscribe',{"room" : "chrome"};
socket.emit('unsubscribe',{"room" : "chrome"};

前端触发订阅/退订事件,就可以加入对应的聊天室。 通过 of 方法也可以通过划分命名空间的方式,实现聊天室功能,但不如分组管理来的方便。

该杂文来自: 网页制作杂文

上一篇:nodejs解决中文乱码的方法

下一篇:js push splice实例精解

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计