1 Star 0 Fork 0

ike_yu/myNode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ws.js 2.43 KB
一键复制 编辑 原始数据 按行查看 历史
ike_yu 提交于 2024-01-11 17:46 . 'babel-node实现node中使用esModule'
// 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}`)
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ike_yu/my-node.git
git@gitee.com:ike_yu/my-node.git
ike_yu
my-node
myNode
master

搜索帮助