hi-sass-frame/src/main/server/wsRouters.ts
2024-09-08 23:46:15 +08:00

85 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import express from 'express';
import expressWs from "express-ws";
const router = express.Router();
const app = express();
expressWs(app);//混入功能使router支持ws方法
const wsClients = [];
/**
* 解决跨域
*/
const cors = (req, res, next) => {
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", "*");
//允许的header类型
res.header("Access-Control-Allow-Headers", "*");
res.header("Access-Control-Allow-Credentials", true);
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("Content-Type", "application/json;charset=utf-8")
if (req.method.toLowerCase() === 'options')
res.sendStatus(200); //让options尝试请求快速结束
else
next();
}
/**
* 接收client的command请求
* @param cmd
*/
function get(cmd) {
console.log(cmd)
}
/**
* 发送command到client端
* @param msg
* @param cb
*/
function send(msg: string, cb) {
cb.send(msg)
}
/**
* 设置ws的回调方法
*/
function callback(ws, req, next) {
// 有客户端连接时, 打印一条日志
console.log("client connect to server successful!", req, next);
// 保存客户端标识
wsClients.push(ws);
ws.on('connect', () => {
ws.send('hello, I am wss');
});
// 创建message监听
ws.on('message', (msg) => {
// 直接将消息打印出来
console.log("receive client msg :", msg);
//处理接收的消息
get(msg);
send("演示自动回复一个消息", ws);
});
//监听客户端断连
ws.on("close", function (msg) {
console.log("client is closed", msg);
for (var index = 0; index < wsClients.length; index++) {
if (wsClients[index] === this) {
wsClients.splice(index, 1)
}
}
});
}
//合并app
// import appExp from "./server";
// const newApp = {...app,...appExp}
/**
* 构造路由
*/
router.ws('/*', callback);
app.use('/ws', cors, router);
export default app;