WebRTC 实现P2P音视频通话——搭建信令服务器
文章目录
前言
WebRTC 实现P2P音视频通话系列记录了从零->搭建信令服务器->搭建stun/turn P2P穿透和转发服务器->WebRTC P2P音视频通话,
WebRTC 实现P2P音视频通话——搭建信令服务器 本文将在公网服务器主机上使用node.js搭建一个简单的聊天室
一、安装NodeJS,npm
通过SSH进入服务器主机
ssh 用户名@IP地址 例如:ssh root@192.168.1.1
通过apt 搜索一下nodejs相关信息
apt search nodejs
通过apt进行安装(也可以通过源码进行编译安装,源码地址:http://nodejs.cn/)
apt install nodejs
安装完成,查看nodejs版本
nodejs --version
二、服务器端实现
1.引入库
通过npm安装接下来需要的第三库
//serve-index 将文件夹中文件列表显示到浏览器中
npm install serve-index
//express 目前最流行的基于Node.js的Web开发框架
npm install express
//socket.io 网络通信开发框架
npm install socket.io
👇socket.io安装失败,需要更新nodejs,npm版本 (更新前nodejs版本为4.2.6,npm版本为3.5.2)
更新nodejs到最新版本
npm install -g n
n stable
更新后的nodejs在/usr/local/bin/node路径下需要通过MV指令移到/usr/bin/node路径下,替换原有的nodejs
mv /usr/local/bin/node /usr/bin/node
更新npm
curl -qL https://www.npmjs.com/install.sh | sh
更新完后执行
npm install socket.io
2.代码实现
新建webserver目录并进入
mkdir webserver
在webserver目录下新建server.js
vi server.js
server.js文件中实现信令服务代码👇
'use strict'
//导入需要使用的相关库
var http = require('http');
var https = require('https');
var fs = require('fs');
//serve-index
var serveIndex = require('serve-index');
//express
var express = require('express');
//socket.is
var socketIo = require('socket.io');
//控制房间内用户个数
var USERCOUNT = 3;
var app = express();
//顺序不能换
app.use(serveIndex('./public'));
app.use(express.static('./public'));
//加载本地路径下的ssl证书,专用于https, 没相关的域名以及证书,https将无法访问,有证书在webserver路径下新建cert目录,将证书拷入
var options = {
key : fs.readFileSync('./cert/XXXXXXXX.cn.key'),
cert : fs.readFileSync('./cert/XXXXXXXX.cn_bundle.pem')
}
//https_server 有证书就直接拷贝到cert路径下,在填入options中,没有就填null,https服务将无法访问
var https_server = https.createServer(null, app);
//http_server
var http_server = http.createServer(app);
//bind socket.io with https_server
var io = socketIo.listen(https_server);
var sockio = socketIo.listen(http_server);
//connection
io.sockets.on('connection', (socket)=>{
socket.on('message', (room, data)=>{
socket.to(room).emit('message', room, data)//房间内所有人,除自己外,转发消息
});
socket.on('join', (room)=> {
socket.join(room);//先加入房间,后面在进行判断,加入房间或者踢出房间
var myRoom = io.sockets.adapter.rooms[room];
var users = Object.keys(myRoom.sockets).length;
//在这里可以控制进入房间的人数,现在一个房间最多 2个人
//为了便于客户端控制,如果是多人的话,应该将目前房间里
//人的个数当做数据下发下去。
if(users < USERCOUNT) {
socket.emit('joined', room, socket.id); //给自己反馈一个成功加入房间的消息
if (users > 1) {
//房间有其他用户,通知其他用户有新的用户加入房间
socket.to(room).emit('otherjoin', room);//除自己之外,房间内其他用户反馈一个有其他用户加入的消息
}
}else {
socket.leave(room);//踢出房间
socket.emit('full', room, socket

该文详细记录了如何使用Node.js和Socket.IO搭建一个简单的信令服务器,以支持WebRTC的P2P音视频通话。首先介绍了安装Node.js和npm的过程,接着在服务器端实现信令服务,包括引入相关库、创建服务器实例、处理客户端连接和房间管理。客户端部分则展示了HTML界面和JavaScript交互代码,实现了界面元素和事件监听。文章以一个聊天室为例,为后续加入音视频通话功能奠定了基础。
1566

被折叠的 条评论
为什么被折叠?



