WebRTC入门1

搭建WebRTC信令服务器

本文选择Nodejs来搭建信令服务器,因为Nodejs可以使用JS语言开发服务器程序。而且Nodejs生态链完整,有各种库支持。可以通过安装工具NPM快速安装所需库。

安装Nodejs

centos系统,使用yum快速安装,其他Linux系统类似。

yum install nodejs

使用yum安装,会自动安装NPM工具。
使用如下命令检查是否安装NMP。

nmp --version

如果没有安装,可以使用以下命令安装

yum install npm

搭建服务端

node.js有两套JS代码,一套位于服务端,一套下发到浏览器运行。
/root下创建用于网站运行的文件夹www
/root/www下创建server.js作为服务端代码,index.html作为浏览器执行的代码。
/root/www/js下创建client.js作为下发到客户端的代码。
以下代码参考:WebRTC 入门教程

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>WebRTC client</title>
    </head>
    <body>
        <script src='/socket.io/socket.io.js'></script>
        <script src='js/client.js'></script>
    </body>
</html>

client.js

var isInitiator;
root=prompt('Enter root name:');
const socket=io.connect();

if(root!==''){
    console.log('Joining room '+room);
    socket.emit('create or join',room);
}

socket.on('full',(room)=>{
    console.log('room'+room+' is full');
});

socket.on('empty',(room)=>{
    isInitiator=true;
    console.log('room'+room+' is empty');
});

socket.on('join',(room)=>{
    console.log('Making request to join room'+room);
    console.log('You are the initiator!');
});

socket.on('log',(array)=>{
    console.log.apply(console,array);
});

server.js

const static=require('node-static');
const http=require('http');
const file=new(static.Server)();
const app=http.createServer(function(req,res){
    file.serve(req,res);
}).listen(2020);

const io=require('socket.io').listen(app);

io.sockets.on('connection',(socket)=>{
    function log(){
        const array=['>>> Message from server: '];
        for(var i=0;i<arguments.length;i++){
            array.push(arguments[i]);
        }
        socket.emit('log',array);
    }

    socket.on('message',(message)=>{
        log('Got message: ',message);
        socket.broadcast.emit('message',message);
    });

    socket.on('create or join',(room)=>{
        var clientsInRoom=io.sockets.adapter.rooms[room];
        var numClients=clientsInRoom ? Object.keys(clientsInRoom.sockets).length : 0;

        log('Room '+room+' has '+numClients+' client(s)');
        log('Request to create or join room '+room);

        if(numClients===0){
            socket.join(room);
            socket.emit('created',room);
        }else if(numClients===1){
            io.sockets.in(room).emit('join',room);
            socket.join(room);
            socket.emit('joined',room);
        }else{
            socket.emit('full',room);
        }

        socket.emit('emit(): client '+socket.id+' joined room '+room);
        socket.broadcast.emit('broadcast(): client '+socket.id+' joined room '+room);
    });
});

要运行该程序,需要使用NPM安装socket.ionode-static

安装socket.io和node-static

socket.io库操作简单,内置房间概念,适合用来开发信令服务器。
node-static库,使服务器具有发布静态文件的功能。
首先进入server.js所在目录,本文指/root/www,使用如下命令安装:

npm install socket.io
npm install node-static

安装完成后,启动服务器

node server.js

在浏览器中输入xx.xx.xx.xx:2020,如果是在本地搭建服务,输入localhost:2020

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容