WebSocket搭建服务器
WebSocket建立在TCP协议上,可以实现浏览器与服务器全双工通信。服务器可以主动发消息给客户端,实现实时推送。与http不同,websocket是一种持久协议。
WebSocket 教程 - 阮一峰的网络日志 (ruanyifeng.com)
nodejs使用websocket可以实现基本服务器搭建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| const ws = require('nodejs-websocket') const PORT = 3000
const server = ws.createServer(connect=>{ console.log("用户已连接") broadcast("用户进入聊天") connect.on('text',data => { broadcast(data) }) connect.on('close',()=>{ console.log("用户已断开") broadcast("用户已退出聊天") }) connect.on('error',()=>{ console.log("链接异常") }) })
server.listen(PORT,()=>{ console.log('启动成功,端口'+PORT) })
function broadcast(msg){ server.connections.forEach(item =>{ item.send(msg) }) }
|
启动服务器后,用户端通过WebSocket对象以事件处理形式与服务器进行交互:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| let input = document.querySelector('input') let button = document.querySelector('button') let re = document.querySelector('#list') let ws = new WebSocket("ws://localhost:3000")
ws.addEventListener('open',()=>{re.innerHTML = '链接成功'})
ws.addEventListener('close',()=>{re.innerHTML = '链接断开'})
button.addEventListener('click',()=>{ let value = input.value ws.send(value) input.value = '' })
ws.addEventListener('message',(response)=>{ console.log(response.data) let newData = document.createElement('div') newData.innerHTML = response.data re.appendChild(newData) })
|
对接收的数据进行处理(注意改成json),可以实现一个最基本的聊天室:
socket.io