1 Socket.IO 服务端发送消息
1.1 给本次连接发消息
socket.emit()
1.2 给房间内所有人发消息
io.in(room).emit()
1.3 除本连接外,给房间内所有人发消息
socket.to(room).emit()
1.4 除本连接外,给所有人发消息
socket.broadcast.emit()
2 Socket.IO 客户端处理消息
2.1 发送 action 命令
S: socket.emit('action');
C: socket.on('action', function(){...});
2.2 发送一个 action 命令,还有 data 数据
S: socket.emit('action', data);
C: socket.on('action', function(data){...});
2.3 发送一个 action 命令,还有两个 data 数据
S: socket.emit('action', data1, data2);
C: socket.on('action', function(data1, data2){...});
2.4 发送一个 action 命令,在 emit 方法中包含回调函数
S: socket.emit('action', data1, function(arg1, arg2){..});
C: socket.on('action', function(data1, fn){fn('a', 'b');});
3 WebRTC 信令服务器
3.1 信令服务器的用途

3.2 为什么要使用 socket.io
socket.io 是 WebSocket 超集socket.io 有房间的概念socket.io 跨平台,跨终端,跨语言
3.3 socket.io 工作原理

3.4 通过 socket.io 实现信令服务器
3.4.1 改造服务端的基本流程
安装 socket.io引入 socket.io处理 connection 消息sudo npm install socket.io@2.0.4
sudo npm install log4js
var socketIo = require('socket.io');var log4js = require('log4js');
log4js.configure({appenders: {console: {type: 'console'},log: {type: 'file',filename: 'log.log',maxLogSize: 1024,backups: 3,compress: true}},categories: {default: {appenders: ['console', 'log'],level: 'debug'}}
})var logger = log4js.getLogger();var https_server = https.createServer(options, app);var io = socketIo.listen(https_server);io.sockets.on('connection', (socket)=> { console.log('connection');socket.on('join', (room)=> {socket.join(room);var my_room = io.sockets.adapter.rooms[room];var users = Object.keys(my_room.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 my_room = io.sockets.adapter.rooms[room];var users = Object.keys(my_room.sockets).length;logger.log('the number of user in room is: ' + (users - 1));socket.leave(room);// 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); // 除自己之外 ,全部 站点});
});https_server.listen(443, '0.0.0.0');
3.5 socket.io 实现聊天室

<html><head><title>Chat Room</title><link rel="stylesheet" href="style.css"></head><body><table align="center"> <tr><td><label>Username</label><input type="text" id="username"></input></td></tr><tr><td><label>Room</label><input type="text" id="room"></input><button id="connect">Connect</button></td></tr><tr><td><label>Content</label><br><textarea disabled id="output" rows="10" cols="50"></textarea></td></tr><tr><td><label>Input</label><br><textarea disabled id="input" rows="3" cols="50"></textarea></td></tr><tr><td><button id="send">Send</button></td></tr></table><script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script><!-- <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> --><script src="js/client.js"></script></body>
</html>
'use strict'//const socket = require("socket.io/lib/socket");var usernaem = document.querySelector('input#userna