记录一下先前对WEBRTC的服务器搭建

房间服务器:我当时放在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-static
4、自己编写房间服务器代码,主要就是给浏览器端交换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;//初始房间号为0
	socket.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


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上了。

你可能感兴趣的:(服务器环境配置)