代码拉取完成,页面将自动刷新
// const { WebSocketServer} = require('ws');
// const { createServer } = require('http');
// 借助babel-node使用import方式导入模块
import { WebSocketServer } from 'ws';
import { createServer } from 'http';
const os = require('os');
const httpServer = createServer();
const createWebSocketServer = (httpServer) => {
const wss = new WebSocketServer({
noServer: true
})
// 握手事件
httpServer.on('upgrade', (req, socket, head) => {
if (req.headers['sec-websocket-protocol'] === 'conn') {
wss.handleUpgrade(req, socket, head, (ws) => {
wss.emit('connection', ws, req)
})
}
})
// 连接事件
wss.on('connection', (ws) => {
console.log('新的连接')
ws.send(JSON.stringify({
type: 'connected' // 主题
}))
// 监听客户端发来的数据
ws.on('message', (data, isBinary) => {
const receiveData = isBinary ? data : data.toString()
console.log('客户端发来的数据', receiveData)
})
})
// 监听错误事件
wss.on('error', (e) => {
const { code } = e;
if (code !== 'EADDRINUSE') { // 非端口被占用
console.error(`websocker error:\n${e.stack || e.message}`)
}
})
return {
send(message) { // 给客户端发消息
wss.clients.forEach(ws => {
if (ws.readyState === 1) {
ws.send(message)
}
})
},
close() { // 关闭ws服务
wss.close()
},
wss
}
}
const ws = createWebSocketServer(httpServer)
// 发送消息
const sendMessage = (type, data) => {
ws.send(JSON.stringify({type, data}))
}
setInterval(() => {
sendMessage('console', `服务端定时向客户端发送消息,时间:${new Date().toLocaleString()}`)
}, 3000)
// 获取本机ip地址
function getIpAddress() {
let interfaces = os.networkInterfaces();
for(let devName in interfaces) {
let iface = interfaces[devName];
for(let i = 0; i < iface.length; i++){
let alias = iface[i];
if(alias.family === "IPv4" && alias.address !== "127.0.0.1" && !alias.internal){
return alias.address;
}
}
}
}
const port = 3000
httpServer.listen(port, getIpAddress(), () => {
console.log(`服务器开启: ws://${getIpAddress()}:${port}`)
})
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。