服务器 > 网络 > 网络协议

如何(关闭)断开 Websocket 连接:简单易懂的实现指南

78人参与 2024-08-06 网络协议

websocket 协议提供了一条用于 web 应用程序中双向通讯的高效通道,让服务器能够实时地向客户端发送信息,而无需客户端每次都发起请求。本文旨在探讨有关结束 websocket 连接的适当时机,内容包括协议的基础知识、如何结束连接、一些使用场景,以及归纳总结。

image.png

websocket 的基础

websocket 协议运作在 tcp 之上,并通过 http 握手升级协议以建立持久连接。这种机制允许数据在服务器和客户端之间双向流动。不同原因会导致需要终结这些连接。

终结连接的常见原因

结束连接的手段

服务端主动关闭

服务端可以通过发送一个含有特定关闭码的帧来主动结束连接。

const websocket = require('ws');
const wss = new websocket.server({ port: 3000 });

wss.on('connection', (ws) => {
  ws.close(1000, '服务端结束连接');
});

客户端主动关闭

客户端也可发送关闭帧结束连接。

const socket = new websocket('ws://example.com');
socket.close(1000, '客户端主动断开');

闲置超时

双方可设定超时机制,若一定时间内无数据传输则自动关闭连接。

实际操作案例

设想构建一个在线聊天应用,若用户一段时间无活动,则服务器断开其 websocket 连接。

const websocket = require('ws');
const wss = new websocket.server({ port: 3000 });

wss.on('connection', (ws) => {
  let isactive = true;

  ws.on('message', (message) => {
    if (isactive) {
      // 消息处理逻辑...
    }
  });

  const timeout = settimeout(() => {
    if (!isactive) {
      ws.close(1000, '用户闲置过久');
    }
  }, 60000); // 60秒超时

  ws.on('pong', () => {
    isactive = true;
  });

  ws.on('close', () => {
    cleartimeout(timeout);
  });
});

在 apifox 中测试 websocket

试验 websocket 接口以验证应用的功能,这时 apifox 的强大测试能力派上用场了。只需新建一个 http 项目,添加一个 websocket 接口,输入服务器 url,享受其简易的测试流程。

image.png

小结

理解 websocket 连接何时应当结束至关重要,无论是主动操作、超时还是出于安全和性能考虑。正确管理这些连接有益于资源节约、安全保障和用户体验提升。通过本文的介绍和案例,希望能帮助您更好地理解并实施 websocket 连接管理策略。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

TCP与UDP的理解

08-06

https认证过程(TLS认证过程)

08-06

网络端口(包括TCP端口和UDP端口)的作用、定义、分类,以及在视频监控和流媒体通信中的定义

08-06

HTTPS单双向认证流程详解与联想

08-06

netmap: UDP 协议栈的实现

08-06

基于TCP/Ip协议的网络编程在线词典

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论