(一)socket.io服务端发送消息

WebRTC学习(五)WebRTC信令服务器

WebRTC学习(五)WebRTC信令服务器

broadcast会向站点中的所有房间发送消息

(二)socket.io客户端处理消息

WebRTC学习(五)WebRTC信令服务器

WebRTC学习(五)WebRTC信令服务器

二:WebRTC信令服务器

(一)信令服务器(TCP)作用

WebRTC学习(五)WebRTC信令服务器

1.媒体相关信息交换:发送SDP描述信息(是否支持音频、视频,已经对应的编解码信息),通过信令服务器进行中转(因为两个客户端之间还没有建立P2P连接)。
2.网络相关信息交换:建立P2P连接之前的双方信息,也是通过信令服务器进行转发。
3.具体业务信息:房间加入、离开、禁言等等

(二)为什么要使用socket.io(本身具有房间的概念)

WebRTC学习(五)WebRTC信令服务器

(三)socket.io工作原理

WebRTC学习(五)WebRTC信令服务器

三:socket.io实现通信服务器

(一)处理流程

WebRTC学习(五)WebRTC信令服务器

对于客户端连接到服务端以后,会在socket.io的底层触发connection消息,所以服务器只需要处理connection消息

(二)实现通信服务器

socket.io版本降级,解决TypeError: socketIo.listen is not a function

'use strict'

var http = require("http");
var https = require("https");
var fs = require("fs");

var express = require("express");
var serveIndex = require("serve-index");

var socketIo = require("socket.io");    //引入socket.io

var log4js = require('log4js');            //开启日志
var logger = log4js.getLogger();
logger.level = 'info';

var app = express();                    //实例化express
app.use(serveIndex("./"));        //设置首路径,url会直接去访问该目录下的文件
app.use(express.static("./"));    //可以访问目录下的所有文件

//https server
var options = {
    key : fs.readFileSync("./ca/learn.webrtc.com-key.pem"),            //同步读取文件key
    cert: fs.readFileSync("./ca/learn.webrtc.com.pem"),                //同步读取文件证书
};

var https_server = https.createServer(options,app);
//绑定socket.io与https服务端
var io = socketIo.listen(https_server);    //io是一个节点(站点),内部有多个房间
https_server.listen(443,"0.0.0.0");
//---------实现了两个服务,socket.io与https server;都是绑定在443,复用端口

//-----处理事件
io.sockets.on("connection",(socket)=>{    //处理客户端到达的socket
    //监听客户端加入、离开房间消息
    socket.on("join",(room)=>{
        socket.join(room);                //客户端加入房间
        //io.sockets指io下面的所有客户端
        //如果是第一个客户端加入房间(原本房间不存在),则会创建一个新的房间
        var myRoom = io.sockets.adapter.rooms[room];    //从socket.io中获取房间
        var users = Object.keys(myRoom.sockets).length;    //获取所有用户数量

        logger.info("the number of user in room is:"+users);

        //开始回复消息,包含两个数据房间和socket.id信息
        //socket.emit("joined",room,socket.id);    //给本人
        //socket.to(room).emit("joined",room,socket.id);    //给房间内其他所有人发消息
        //io.in(room).emit("joined",room,socket.id);        //给房间中所有人(包括自己)发送消息
        socket.broadcast.emit("joined",room,socket.id);    //给节点内其他所有人发消息
    });
    
    socket.on("leave",(room)=>{
        var myRoom = io.sockets.adapter.rooms[room];    //从socket.io中获取房间
        var users = Object.keys(myRoom.sockets).length;    //获取所有用户数量

        logger.info("the number of user in room is:"+(users-1));

        socket.leave(room);    //离开房间
        //开始回复消息,包含两个数据房间和socket.id信息
        socket.broadcast.emit("leaved",room,socket.id);    //给节点内其他所有人发消息
    });

    socket.on("message",(room,msg)=>{
        var myRoom = io.sockets.adapter.rooms[room];    //从socket.io中获取房间
        logger.info("send data is:"+msg);

        socket.broadcast.emit("message",room,socket.id,msg);    //给节点内其他所有人发消息
    });
});
server.js

相关文章:

  • 2021-08-31
  • 2021-11-07
  • 2021-10-23
  • 2022-12-23
  • 2021-07-04
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-12
  • 2021-09-11
  • 2021-11-06
  • 2021-09-14
  • 2021-08-03
  • 2022-02-02
  • 2022-12-23
相关资源
相似解决方案