记录一下先前对WEBRTC的服务器搭建
来源:互联网 发布:淘宝精选是怎么回事 编辑:程序博客网 时间:2024/05/29 17:57
房间服务器:我当时放在windows上,以下操作最好都使用管理员权限运行
1、我的房间服务器用的NOSEJS,在windows上下载NOSEJS安装程序,安装完后环境变量PATH里就自动加上了相应路径,不过最好还是检查一下
2、使用CMD走一次node -v,看到版本号了说明安装正确
3、继续安装以下组件
> npm install express > npm install yetify > npm install getconfig > npm install node-uuid > npm install socket.io > npm install node-static4、自己编写房间服务器代码,主要就是给浏览器端交换offer、answer和candidate用,之所以用socket.io,是因为具备比普通ajax更高的实时性。如果担心长连接对服务器负担大,完全可以在完成接通后关闭socket,提前是你不需要用socket来干别的比如实时文本消息。由于谷歌强调安全性,在Chrome中必须要用https才允许调用本麦克风和摄像头,这里我贴一个我用https做的demo/server.js
var static = require('node-static');var http = require('https');const fs = require('fs');const options = { //这里定义https证书文件key: fs.readFileSync('site.key'),cert: fs.readFileSync('site.pem')};var file = new(static.Server)();var app = http.createServer(options, (req, res) => {file.serve(req, res);}).listen(8080);var roomPerfix = 'room_';//房间名前缀var io = require('socket.io').listen(app);io.sockets.on('connection', function (socket){//io.sockets.emit('message', socket.id + ' joind!');//某人加入在线列表socket.room_id = 0;//初始房间号为0socket.on('message', function (message) {socket.broadcast.to(roomPerfix + this.room_id).emit('message', socket.nick_name + ':' + message);});socket.on('data', function (data) {socket.broadcast.to(roomPerfix + this.room_id).emit('data', data);});socket.on('offer', function (offer) {socket.broadcast.to(roomPerfix + this.room_id).emit('offer', offer);});socket.on('answer', function (answer) {socket.broadcast.to(roomPerfix + this.room_id).emit('answer', answer);});socket.on('candidate', function (candidate) {socket.broadcast.to(roomPerfix + this.room_id).emit('candidate', candidate);});socket.on('nick_name', function (nick_name) {socket.nick_name = nick_name;});//以上事件的作用分别是:实时文本聊天、自定义类型数据传送、发起RTC呼叫、RTC回应、交换ICE、设置昵称socket.on('join_hall', function (info_type) {//进入大厅,自己的代码请自己写});//接受端上线创建房间,判断是否已经存在房间socket.on('create_room', function (room) {//自己的代码请自己写});//发起端加入房间,判断是否已经存在房间socket.on('join_room', function (room) {//同上});//遍历房间在线状态socket.on('get_room_status', function (rooms) { //rooms传过来的是一维数组,json形式var room_list = JSON.parse(rooms);var i,numClients,result=[];for(i=0;i<room_list.length;i++){numClients = io.sockets.clients(roomPerfix + room_list[i]).length;result.push({room_id:room_list[i],room_status:numClients});}socket.emit('room_status_list',JSON.stringify(result));});//拒接:结束会话,接受端将发起端移出房间socket.on('refuse_session', function (room) {socket.broadcast.to(roomPerfix + room).emit('refuse_session',room);//拒接//将发起端移出房间io.sockets.clients(roomPerfix + room).forEach(function (room_socket) {if(room_socket.id != socket.id){room_socket.room_id = 0;room_socket.leave(roomPerfix + room);}});socket.broadcast.to('hall').emit('hall_show', room);//通知大厅,我可以接受连接});socket.on('disconnect', function(data){//掉线处理});});
TURN/STUN服务器:目前没有windows版,我在centos7.2下装的turnserver-4.4.5.2
当时是照着http://www.centoscn.com/image-text/install/2015/0923/6216.html操作的,端口默认3478,自己可以根据需要配置端口和其他信息
它有个好处是同时提供stun和turn服务,这样在简单UDP穿透NAT成功的情况下,客户端之间直接建立点对点通信,不会持续占用服务器带宽,而穿透不成功时,则使用中继服务,这会占用服务器带宽,但可以保证在复杂网络环境中的连接成功率。
WEBRTC客户端加入:
var iceServer = {"iceServers": [{"url": "stun:你的IP:3478"}, {"url": "turn:你的IP:3478","username": "你的帐号","credential": "你的密码"}]};创建RTCPeerConnection时将iceServer作为参数带上,像这样:var pc = new RTCPeerConnection(iceServer);
部署完成,便可以摆脱局域网,让自己的程序基于以上服务,飞奔在internet上了。
阅读全文
0 0
- 记录一下先前对WEBRTC的服务器搭建
- WebRTC 本地服务器搭建问题记录
- 记录一下nginx对upstream上流服务器的数据读取
- webRTC:一、房间服务器的搭建(综述)
- Webrtc服务器搭建
- Webrtc服务器搭建
- Webrtc服务器搭建
- Webrtc服务器搭建
- Webrtc服务器搭建
- Webrtc服务器搭建 (coturn)
- webrtc服务器搭建
- webrtc-房间服务器搭建
- Webrtc服务器搭建
- webrtc coturn服务器搭建
- Webrtc服务器搭建
- webrtc 服务器搭建
- 简单记录一下,cenos 7搭建ftp服务器
- webrtc应用turn服务器搭建
- MySQL忘记密码的正确解决方法
- 关于判断某一数组内容是否为一个二叉搜索树的后序遍历结果
- SSH关闭远程密码登录---Window&Linux客户端证书登录&window找不到ssh-keygen
- 用volley框架进行网络访问
- Unity5.x学习笔记(2)-物体向上飞
- 记录一下先前对WEBRTC的服务器搭建
- TCP/IP模型与OSI模型的比较
- Laravel 5.4 整合SendCloud邮件服务
- Linux--shell中的命令替换``与$()以及eval命令
- Android四大基本组件介绍
- 启动adb 报错:端口被占用
- 中间有跳板机,mac电脑如何与服务器之间进行上传与下载文件
- (大数据整合)Python、Kettle完整开发
- static关键字