欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WebRTC信令服务器实现 八、第一节 如何使用socket.io发送消息

程序员文章站 2022-06-24 16:31:21
今天我们学习用socket.io发送消息,socket.io发送消息发送消息的情况非常多 ,大概有十来种情况。其中有四五项是我们要清楚和了解的。给本次链接发送消息socket.emit()这表示客户端发送了一个消息给服务端 ,服务端收到这个消息之后给了一个callback. 也就是一个返回,比如说我要加入房间,当我加入之后他给我回一个已经加入成功。只是给我本人发的。我收到加入成功之后,我就可以做后面的逻辑处理了。这样就形成了一个异步的操作。给某个房间内所有人发消息io.in(room...

今天我们学习用socket.io发送消息,socket.io发送消息发送消息的情况非常多 ,大概有十来种情况。其中有四五项是我们要清楚和了解的。

给本次链接发送消息

socket.emit()

这表示客户端发送了一个消息给服务端 ,服务端收到这个消息之后给了一个callback. 也就是一个返回,比如说我要加入房间,当我加入之后他给我回一个已经加入成功。只是给我本人发的。我收到加入成功之后,我就可以做后面的逻辑处理了。这样就形成了一个异步的操作。

给某个房间内所有人发消息

io.in(room).emit()

这相当于是一个广播了,所有人就包括我自己,我发的这个消息我自己也要知道。比如还以加入房间为例,其实他要给房间中的每一个人都要发送一个消息,这个用户已经加入房间了。当然有的业务就不需要,他只是给你发送者回了“你已经加入成功了”。

还有就是各个端都要维护一个用户列表,那谁来了谁出去了,我都要清楚,这个时候就要每一个人都收到这个消息,对于发送者来说,我收到这个消息,就可以做后面的逻辑处理,做音视频的采集等。

对于其他用户来说,当我收到用户已经加入的消息的时候,就更新 一个我的用户列表,将这个用户添加到我的用户列表当中去,这是给某个房间内的所有人发消息。

io就代表整个节点,我们部署的socket节点里,上面的所有的人都包含在内,room就代表某个具体的房间,也就是说房间内的所有人要发送 。

除本连接外,给某个房间内所有人发消息

socket.to(room).emit()

也就是说在这个房间内,我发送的消息我自己不收到,其他人都收到,比如我要发一个全体静音,就是不让别人说话了,只允许我说话,那我发送消息的时候就要使用这个。

socket代表我们创建连接时的socket,给房间内的所有其他人发送消息。

除本连接外,给所有人发消息

socket.broadcast.emit()

这个是除本人外,给所有人发消息,在一个IO节点里,可能有很多个房间,比如10个或者20个房间,那么这个broadcast就是广播,我要给除我之外的所有人(整个站点的所有人)发消息。比如我发了一个通知,将节点中的所有用户都切掉,就是都要断掉去连另外的节点,然后你可以通过超级管理员的用户,给所有人发消息。
 

当我客户端收到消息如何处理

发送action命令

S: socket.emit('action');
C: socket.on('action',function(){...});

当S(server端)发送一个消息action,也就是一个动作,那么C(client端)要监听这个动作,通过socket.on监听这个action,它处理的时候后面带了一个函数,后面是一个具体的逻辑。

发送了一个action命令,还有data数据

S: socket.emit('action', data);
C: socket.on('action', function(data){...});

发送了一个action, 还有两个数据

S: socket.emit(action, arg1, arg1);
C: socket.on('action', function(arg1,arg2){...});

发送了一个action命令,在emit方法中包含回调函数

S: socket.emit('action',data,function(arg1,arg2){});
C: socket.on('action',function(data,fn){fn('a','b');});

也就是说服务端给你写好了一个方法,在客户端就可以直接获取到这个方法 。

 

本文地址:https://blog.csdn.net/xyphf/article/details/107289445