// 前端代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> /*div{ 200px; height: 200px; border: 1px solid red; }*/ </style> </head> <body> <input type="text" /> <button>发送</button> <div></div> <script type="text/javascript"> var inp = document.querySelector('input') var but = document.querySelector('button') var div = document.querySelector('div') // 创建websocket var socket = new WebSocket('ws://localhost:3000') // 当和websocket连接成功时触发 socket.addEventListener('open', () => { div.innerHTML = '连接服务成功' }) // 主动给websocket服务发送消息 but.addEventListener('click', () => { var val = inp.value socket.send(val) inp.value = '' }) // 接受客户端信息 socket.addEventListener('message', (e) => { console.log(e.data) var data = JSON.parse(e.data) var dv = document.createElement('div') dv.innerText = data.msg + '------' + data.time if (data.type === 0) { dv.style.color = 'blue' } else if (data.type === 1) { dv.style.color = 'green' } else { dv.style.color = 'red' } div.append(dv) }) // 服务器断开 socket.addEventListener('close', () => { console.log('服务器断开') div.innerHTML = '服务器断开' }) </script> </body> </html> // node 后端代码 const ws = require('nodejs-websocket') console.log(ws) const Port = 3000 let count = 0 const TYPE_IN = 0 const TYPE_OUT = 1 const TYPE_MSG = 2 const server = ws.createServer(connect => { console.log(connect) console.log('有用户链接上来了') count++ connect.userName = `用户${count}` /*** * type: 0 表示进入聊天室 1 表示正常 2表示离开聊天室 * msg 发给浏览器的消息 * time 时间 */ broadcast({ type: TYPE_IN, msg: `${connect.userName}进入聊天室`, time: new Date().toLocaleTimeString() }) // broadcast(`${connect.userName}进入聊天室`) // 每当监听到用户传递过来的数据,这个text就会触发 connect.on('text', data => { console.log('接受的用户数据:'+ data) // broadcast(`${connect.userName}:${data}`) broadcast({ type: TYPE_OUT, msg: `${connect.userName}:${data}`, time: new Date().toLocaleTimeString() }) // 给当前用户一个响应数据 //connect.send(mes +'!!!') }) // 只要websocket断开close事件就会触发 connect.on('close', () => { count-- // broadcast(`${connect.userName}离开聊天室`) broadcast({ type: TYPE_MSG, msg: `${connect.userName}离开聊天室`, time: new Date().toLocaleTimeString() }) console.log('链接断开') }) //注册一个error处理用户的错误信息 connect.on('error', () => { console.log('用户连接异常') }) }) // 广播给所有用户发消息 const broadcast = (msg) => { // server.connections 表示所有的用户 server.connections.forEach(item => { item.send(JSON.stringify(msg)) }) } server.listen(Port, () => { console.log('监听端口号' + Port) })