Window7通过Node.js实现一套最简单的信令系统

这是对"李超"老师线上课程"如何通过Node.js实现一套简单的信令系统"的总结。并在Window平台下实现一遍,对Node.js入门或想用window平台学习的,或许有一定的帮助。

开发环境的搭建

1、 NodeJS的下载

访问地址:https://nodejs.org/en/download/

2、NodeJS的安装

根据提示直接进行傻瓜式安装即可。

4、NPM的安装

正常情况下,NodeJS安装完成后,随带把NPM安装好了。

5、验证NodeJS是否安装成功

Win + R , 输入cmd ,打开dos命令行,输入 node -v 查看NodeJS版本号。

6、验证NPM是否安装成功

Win + R , 输入cmd ,打开dos命令行,输入 npm  -v 查看NPM版本号。

7、在即将演示的例子需要使用NPM安装socket.io和node-static,安装方法如下:

npm install socket.io
npm install node-static

示例的目录结构

演示功能

  • 客户端发送消息给服务端

  • 后端触发事件告知客户端

  • 客户端离开触发服务端事件

服务端

server.js

const static = require('node-static');
const http = require('http');
const file = new(static.Server)();
const app = http.createServer(function (req, res) {
  file.serve(req, res);
}).listen(2013, ()=>{
console.log('listening 2013');
})
console.log('start create listen!');
const io = require('socket.io').listen(app); // 侦听 2013

io.sockets.on('connection', (socket) => {

  // convenience function to log server messages to the client
  function log(){ 
    const array = ['>>> Message from server: ']; 
    for (var i = 0; i < arguments.length; i++) {
      array.push(arguments[i]);
    } 
      socket.emit('log', array);
  }

  socket.on('message', (message) => { // 收到 message 时,进行广播
  console.log(message);
    log('Got message:', message);
    // for a real app, would be room only (not broadcast)
    socket.broadcast.emit('message', message); // 在真实的应用中,应该只在房间内广播
  });

  socket.on('create or join', (room) => { // 收到 “create or join” 消息
  
  console.log(room);

	var clientsInRoom = io.sockets.adapter.rooms[room];
    var numClients = clientsInRoom ? Object.keys(clientsInRoom.sockets).length : 0; // 房间里的人数

    log('Room ' + room + ' has ' + numClients + ' client(s)');
    log('Request to create or join room ' + room);

    if (numClients === 0){ // 如果房间里没人
      socket.join(room);
      socket.emit('created', room); // 发送 "created" 消息
    } else if (numClients === 1) { // 如果房间里有一个人
	  io.sockets.in(room).emit('join', room);
      socket.join(room);
      socket.emit('joined', room); // 发送 “joined”消息
    } else { // max two clients
      socket.emit('full', room); // 发送 "full" 消息
    }
    socket.emit('emit(): client ' + socket.id +
      ' joined room ' + room);
    socket.broadcast.emit('broadcast(): client ' + socket.id +
      ' joined room ' + room); 
  });
  
  socket.on('disconnect', function(data) {
	  console.log('ssuqin断开',data);
  })
});

客户端

client.html

<!DOCTYPE html>
<html>
  <head>
    <title>WebRTC client</title>
  </head>
  <body>
    <script src='C:/Program Files/nodejs/node_modules/socket.io-client/dist/socket.io.js'></script>
    <script src='js/client.js'></script>
  </body>
</html>

client.js

var isInitiator;

room = prompt('Enter room name:');

const socket = io.connect("http://192.168.1.7:2013");

/**
socket.on('connect', function() {
    socket.emit('pong',{message:"ciaooo"});
    socket.on('ping', function (data) {
    alert(data);
});
*/

if (room !== '') {
  console.log('Joining room ' + room);
  socket.emit('create or join', room);
}

socket.on('full', (room) => {
  console.log('Room ' + room + ' is full');
});

socket.on('empty', (room) => {
  isInitiator = true;
  console.log('Room ' + room + ' is empty');
});

socket.on('join', (room) => {
  console.log('Making request to join room ' + room);
  console.log('You are the initiator!');
});

socket.on('joined', (room) => {
  console.log('joined room[' + room +']');
});

socket.on('created', (room) => {
  console.log('created room[' + room +']');
});

socket.on('log', (array) => {
  console.log.apply(console, array);
});

socket.on((message) => {
  console.log(message);
});

启动服务端并测试

node server.js

启动客户端

用chrome打开client.html页面,连续打开三个或三个以上。下面让我们通过浏览器的控制台去看看发生了什么吧。下面是我的输出结果:

参考链接:

https://www.e-learn.cn/content/wangluowenzhang/1060289

https://www.cnblogs.com/fengch/p/8634438.html

https://www.cnblogs.com/zqzjs/p/6370072.html

https://www.cnblogs.com/fengch/p/8634438.html

https://blog.csdn.net/cai454692590/article/details/86093297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值