实现1V1音视频实时互动直播系统 十二、第四节实现1V1音视频实时互动信令服务器

tech2023-01-05  109

server.js  

'use strict' var http = require('http'); var https = require('https'); var fs = require('fs'); var express = require('express'); var serveIndex = require('serve-index'); var USERCOUNT = 3; //socket.io var socketIo = require('socket.io'); // var log4js = require('log4js'); log4js.configure({ appenders: { file: { type: 'file', filename: 'app.log', layout: { type: 'pattern', pattern: '%r %p - %m', } } }, categories: { default: { appenders: ['file'], level: 'debug' } } }); var logger = log4js.getLogger(); var app = express(); app.use(serveIndex('./public')); app.use(express.static('./public')); //http server var http_server = http.createServer(app); http_server.listen(80, '0.0.0.0'); var options = { key : fs.readFileSync('./cert/1557605_您自己的.key'), cert: fs.readFileSync('./cert/1557605_您自己的.pem') } //https server var https_server = https.createServer(options, app); //bind socket.io with https_server var io = socketIo.listen(https_server); var sockio = socketIo.listen(http_server); //connection 1、有一个连接来了 io.sockets.on('connection', (socket)=>{ // 2、 给房间内的其他人进行消息转发 socket.on('message', (room, data)=>{ socket.to(room).emit('message', room, data)//房间内所有人,除自己外 }); // 3、 //该函数应该加锁 socket.on('join', (room)=> { // 4、调用socket.join将这个用户加入到这个房间 socket.join(room); // 5、socket.io 本身就支持room的概念, 拿到这个房间 var myRoom = io.sockets.adapter.rooms[room]; // 6、看看这个房间已经有多少人了 var users = (myRoom) ? Object.keys(myRoom.sockets).length : 0; logger.log('the number of user in room is: ' + users); //在这里可以控制进入房间的人数,现在是1V1那么一个房间最多 2个人 //为了便于客户端控制,如果是多人的话,应该将目前房间里 //人的个数当做数据下发下去。 if(users < USERCOUNT) { // USERCOUNT是常量3, 如果users<3; socket.emit('joined', room, socket.id); // 发给除自己之外的房间的所有人,两个人的话也就是对方,告诉他我已经进入房间了 if (users > 1) { // 如果你是第一个人,那我只发一个joined, 如果你不是房间的第一个人,那说明房间里已经有另外一个人了 socket.to(room).emit('otherjoin', room);//emit除自己之外 那么要给另外一个人发生otherjoin,让它知道有其他人进来了 } }else { // 超过2个人的话 socket.leave(room); // 让此人离开房间 socket.emit('full', room, socket.id); // 告诉它房间已满 } // socket.to(room).emit('joined', room, socket.id);//除自己之外 //io.in(room).emit('joined', room, socket.id)//房间内所有人 //socket.broadcast.emit('joined', room, socket.id);//除自己,全部站点 }); // 4、离开 socket.on('leave', (room)=> { var myRoom = io.sockets.adapter.rooms[room]; var users = (myRoom) ? Object.keys(myRoom.sockets).length : 0; //users - 1; logger.log('the number of user in room is: ' + (users-1)); // socket.leave(room); socket.to(room).emit('bye', room, socket.id)// 给房间内所有人(除自己外)发生bye socket.emit('leaved', room, socket.id); // 给自己发送leaved //socket.to(room).emit('joined', room, socket.id);//除自己之外 //io.in(room).emit('joined', room, socket.id)//房间内所有人 //socket.broadcast.emit('joined', room, socket.id);//除自己,全部站点 }); }); //connection sockio.sockets.on('connection', (socket)=>{ socket.on('message', (room, data)=>{ sockio.in(room).emit('message', room, socket.id, data)//房间内所有人 }); socket.on('join', (room)=> { socket.join(room); var myRoom = sockio.sockets.adapter.rooms[room]; var users = Object.keys(myRoom.sockets).length; logger.log('the number of user in room is: ' + users); socket.emit('joined', room, socket.id); //socket.to(room).emit('joined', room, socket.id);//除自己之外 //io.in(room).emit('joined', room, socket.id)//房间内所有人 //socket.broadcast.emit('joined', room, socket.id);//除自己,全部站点 }); socket.on('leave', (room)=> { var myRoom = sockio.sockets.adapter.rooms[room]; var users = Object.keys(myRoom.sockets).length; //users - 1; logger.log('the number of user in room is: ' + (users-1)); socket.leave(room); socket.emit('leaved', room, socket.id); //socket.to(room).emit('joined', room, socket.id);//除自己之外 //io.in(room).emit('joined', room, socket.id)//房间内所有人 //socket.broadcast.emit('joined', room, socket.id);//除自己,全部站点 }); }); https_server.listen(443, '0.0.0.0');

 

最新回复(0)