WebSocket 的约束

在上一篇中,我们介绍了为什么要引入WebSocket,这一篇我们介绍WebSocket实现过程中有哪些约束。

WebSocket实现可伸缩性更难

WebSocket的好处是实时性,但牺牲了可伸缩性。

在HTTP通信的系统中,我们通过负载均衡很容易做伸缩,如下图所示

HTTP通信系统可伸缩性

但是在WebSocket通信的系统中,因为客户端与负载均衡服务器只建立了一个WebSocket连接,此时如果要做可伸缩性,需要比较复杂的架构设计,如下图所示:

HTTP通信系统可伸缩性

将WebSocket分层,第一层是WebSocket接入层,第二层是WebSocket实现层。在WebSocket接入层只做协议转换,转换为消息分发系统(如Kafka)能识别的协议。

WebSocket长连接的心跳保持比较复杂

HTTP长连接只能基于简单的超时,比如65秒。而WebSocket长连接需要基于Ping/Pong心跳机制来维持。

WebSocket对开发者要求高了许多

对前端开发者,往往要具备数据驱动使用javascript的能力,且需要维持住ws连接(否则消息无法推送);

对后端开发者而言,难度增大了很多:

  • 一是长连接需要后端处理业务的代码更稳定(不要随便把进程和框架都crash掉)
  • 二是推送消息相对复杂一些
  • 三是成熟的http生态下有大量的组件可以复用,websocket则太新了一点。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程