有一段时间没有写博客了,前段时间一直在忙项目,由于项目的需求,需要搭建一个websocket的通信服务,用于教师机对客户端(学生端)进行通信已执行一些操作,之前用java写了一个websocket通信的东西,但是这个东西的稳定性太差,本来是搞java的,说是撸一个netty框架的websocket,但是项目组长说用node.js写一个,,,
websocket.io W3Cschool api 文档
https://www.w3cschool.cn/socket/socket-odxe2egl.html
废话不多少,直接上代码,代码运行需要安装 node环境 和相关模块
服务端:
let express = require('express');
let http = require('http');
let request = require("request");
let qs = require('querystring');
let app = express()
app.use(express.static(__dirname))
app.get('/', function (res, req) {
res.header('Content-Type', 'text/html;charset=utf8')
res.sendFile(path.resolve('index.html'))
})
let server = http.createServer(app)
let teacher = {};
// 客户端实例id
let users = {};
let userType = {};
let post_data = {};
let resData = {};
let url = "";
// 因为websocket协议是要依赖http协议实现握手的,所以需要把httpServer的实例传递给socket.io
let socketIo = require('socket.io')
let io = socketIo(server)
// 在服务器监听客户端的链接
io.on('connection', socket => {
console.log('客户端连接到服务器')
io.to(socket.id).emit('message',"服务器连接成功......");
console.log(users)
console.log(teacher)
// 监听接受客户端发过来的消息
socket.on('message', msg => {
console.log('客户端消息 :', msg)
let data = msg;
let key = getTeacherAccId(socket.id);
if (data && data.code && key) {
resData = {};
post_data = {};
url = "";
switch(data.code){
case 2001: // 延长考试时间
// 设置参数
post_data.examId = data.data.examId;
url = "http://xx.xx.xx:8006/xxx";
postRequest(url,data.data.token,post_data,resData,false,key);
break;
case 2002: // 强制交卷