搭建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.io和node-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。