我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

websocket通信,是一个可以在浏览器里面使用的双向通信的技术。相比较传统的ajax的轮询类型的通信方式,websocket显然更加节约资源,它一般用作聊天类的需要消息推送的程序中。

苏南大叔:websocket通信,基于nodejs的双向通信例子 - websocket-nodejs
websocket通信,基于nodejs的双向通信例子(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10nodejs@20.18.0ws@8.18.0websocket通信的服务器端,很多高级编程语言都可以实现。在本文中,采用更容易接受的nodejs编程语言来阐释这个例子,后续再补充其它编程语言的例子。

websocket

WebSocket是一种长连接技术‌。WebSocket通过单个TCP连接持续传输数据,实现了客户端和服务器之间的持久连接。与传统的HTTP短连接不同,WebSocket在建立连接后,可以保持连接状态,并在需要时进行数据传输,无需每次传输都重新建立连接‌。

服务器端

主要的逻辑,还是收发实时消息。需要先安装ws这个第三方库。

npm i ws --save

服务器端,

let WebSocket = require("ws");
let server = new WebSocket.Server({ port: 8080 });
server.on("connection", function connection(ws) {
  ws.on("message", (msg) => {
    let message = msg.toString(); // buffer
    console.log("服务器端收到消息", message);
    if (message == "苏南") {
      ws.send("大叔");
    } else if (message == "ping") {
      ws.send("pong");
    }
  });
});

客户端

客户端一般为浏览器网页代码,主要实现的是收发消息。

<script>
  let ws = new WebSocket("ws://localhost:8080");
  ws.onopen = function () {
    ws.send("苏南");
  };
  ws.onclose = () => {
    console.log("服务器断开链接");
  };
  ws.onerror = () => {
    console.log("有错误发生");
  };
  ws.onmessage = function (e) {
    let msg = e.data;
    console.log("客户端收到消息:%s", msg);
    if (msg === "pong") {
      console.log("Heartbeat received");
    }
  };
  let heartbeatInterval = setInterval(() => {
    if (ws.readyState === WebSocket.OPEN) {
      ws.send("ping");
    } else {
      clearInterval(heartbeatInterval);
    }
  }, 3000);
</script>

on('message')和onmessage()

浏览器端的写法是.onmessage(()=>{}),服务器端的写法是.on('message',()=>{}),两者不能互换。会发生错误或者不生效!

苏南大叔:websocket通信,基于nodejs的双向通信例子 - onmessage的写法
websocket通信,基于nodejs的双向通信例子(图3-2)

心跳机制

心跳机制实际上就是客户端定时发送消息,服务器端收到消息后,实时回复特定消息。从而确定彼此的存在,如果一定时间内没有得到期待中的回应,则可以认为心跳检测失败。

苏南大叔:websocket通信,基于nodejs的双向通信例子 - websocket心跳机制
websocket通信,基于nodejs的双向通信例子(图3-3)

虽然最基础的心跳机制就是这样写的,但是对于websocket来说,这个心跳写的并不是很好,待后续补充。这里就仅仅作为服务器和客户端收发消息的一个例子好了。

结语

websocket协议,里面包括:wswss,类似于httphttps的关系。本文未包含wss,待议。更多websocket相关文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   websocket