1.前言 what how
最近在梳理知识体系,看到Websocket,想起以前自己做呼叫中心,电话条相关业务用的也是socket,IM
即时通讯用的比较多,就想做个聊天的雏形
http
HTTP 协议有一个缺陷:短连接,通信只能由客户端发起
也就是说:只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息
http想要获取服务器连续状态的变化就非常麻烦,通常就是
轮询
:每隔一段时间,发出一个询问,就是请求,其实之前做的电话条业务,在线,忙碌等状态最初也是轮询
获取效率太低,非常浪费资源
Websocket
服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于
服务器推送技术
的一种。
2.客户端代码
<input type="text" placeholder="请输入聊天内容" id="msgInput"> <button onclick="sendMsg()">发送</button> <ul id="msgUl"></ul> <script> //1. 客户端发起请求 协议://ip:端口 // localhost 就是 127.0.0.1 本机 var clientWS = new WebSocket("ws://localhost:3000") // 2. 监听服务是否建立 链接成功 clientWS.onopen = function () { console.log("链接成功"); } // 3. 监听服务端 是否给消息 clientWS.onmessage = function (e) { console.log("服务端发来的消息:", e.data); showMsg("TA:"+e.data) } // 4.监听是否关闭 clientWS.onclose = function () { console.log("服务已断开"); } // 5. 客户端向服务端发送消息 function sendMsg(){ clientWS.send(inpuMsg.value) showMsg("我:"+inpuMsg.value) inpuMsg.value = "" } function showMsg(msg){ let li = document.createElement("li") li.innerHTML = msg msgUl.appendChild(li) } </script>
3.服务端代码
const readline = require('readline'); var ws = require('ws') wss = new ws.Server({ port: 3000 },function(){ console.log("3000 server start") });//服务端口3000 wss.on('connection', function (ws) { console.log('服务端:客户端已连接'); ws.on('message', function (message) { console.log("服务端接收客户端的消息:", message); //创建readline接口实例 const rl = readline.createInterface({ input: process.stdin, //设置标准的输入流 output: process.stdout //设置标准输出流 }); rl.question('请输入: ', function (answer) { ws.send(answer) // 不加close,则不会结束 rl.close(); }); }); });
4.无界面哈哈
极简吧😆😆
5. 哈哈 闲来无事又加了简单的聊天记录显示
代码已经更新了其实很简单
聊天记录大型社 si 现场 哈哈
1.png