nodejs创建ws服务器,前端浏览器用websocket接收信息和发送信息给服务端

首页是用nodejs建立服务器端
//wsserver.js

const WebSocket=require('ws');
const wss=new WebSocket.Server({port:8080});
wss.on('connection',function connection(ws){
    ws.on('error',console.error);
    //接收客户端发送过来的信息
    ws.on('message',function message(data){
        console.log('received:%s',data);
    });
    //向服务端发送信息
    ws.send('你好啊客户端');
})

//创建前端的websocket文件
websocketclient.js

class WebSocketClient {
	//私有成员url和socket变量
    #privateUrl = '';
    #privateSocket = null;
    #messageQueue = []; // 消息队列,用于存储在连接打开前的消息

    constructor(url) {
        this.#privateUrl = url;
        //创建websocket对象,url就是服务器地址:ws://localhost:8080
        this.#privateSocket = new WebSocket(this.#privateUrl);
        //建立连接函数
        this.#setupWebSocketEvents();
    }

    #setupWebSocketEvents() {
        this.#privateSocket.onopen = () => {
            console.log(`连接成功,等待服务端数据推送[onopen]...`);
            // 连接打开后,发送队列中的消息
            this.#messageQueue.forEach(msg => this.#privateSocket.send(msg));
            this.#messageQueue = []; // 清空消息队列
        };
        //下面三个必须用箭头函数才能反应上下文关系
        this.#privateSocket.onmessage = (event) => {
            console.log('服务端发送来的数据%s', event.data);
        };
        this.#privateSocket.onclose = () => {
            console.log('连接已断开[onclose]...');
        };
        this.#privateSocket.onerror = (event) => {
            console.log('连接异常[onerror]');
        };
    }

//这里客户端发送信息,如果是已经连接状态则直接发送信息,如果未打开连接或连接中,则把信息添加到队列中
    sendWhenConnected(message) {
        if (this.#privateSocket && this.#privateSocket.readyState === WebSocket.OPEN) {
            this.#privateSocket.send(message);
        } else {
            // 如果WebSocket尚未打开连接,则将消息添加到队列
            this.#messageQueue.push(message);
        }
    }

    
//关闭连接
    close() {
        if (this.#privateSocket) {
            this.#privateSocket.close();
            this.#privateSocket = null;
        }
    }
}
//导出WebSocketClient类
export default WebSocketClient;

//html文件,index.html

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
        <title>测试websocket</title>
    </head>
    <body>
        
    </body>
    <script type="module">
    //导入类
        import WebSocketClient from './websocketclient.js';
        //创建对象连接
        let a=new WebSocketClient('ws://localhost:8080');
        //向服务端发送信息
        a.sendWhenConnected('你好啊服务端');
        
        
    </script>
</html>

最后结果为这样
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值