idea: 基于 http 的双向通信

纯 http 上的双向通信

最近大概看了下 rxJava 的订阅者模式,然后突发奇想有没有可能用类似的思路实现纯 http 上的双向通信

A 是传统的 http 服务器

B 是普通的客户端,假设我们能够在 B 上启动一个简易的 http server 并且有办法实现公网访问

然后通过类似事件订阅的方式实现双向通信。

例:

要实现的功能:
B 是美团外卖商家端,当有用户下单时,B 能够收到推送

A 是美团服务器,当用户下单时,给 B 发请求通知 B

实现思路:

A 存两个 model, 一个是订单 orders,一个是订单的订阅者 subscribers(订单和B这类客户端的订阅关系)

商家在 B 上登录后,像 A 发一个请求,带着 B 的外网访问路径(外网 ip 或者一种自建的规则),以及 B 要订阅的
对象、对象规则和事件(比如 对象为 “订单”, 规则为 订单的商家字段为当前商家,事件为 “新建”)

当消费者下了一个订单,即新建了一个订单后, A 从 subscribers 表中找符合条件的订阅者,如果找到,就向
订阅者的 ip 发请求。

然后 B 的服务器就能收到 http 请求。

分割

或者说,如果在客户端上实现这个不太可能,或起一个 http server 不好保活,或费电因而意义不大的话,
把 A 和 B 都假设为服务器,在两台服务器间实现这样的基于 http 的双向通信有没有意义呢?

与传统长连接实现的双向通信相比,代价当然是 A 和 B 都需要启一个服务端口。好处是纯 http 实现,而且不需要维护长连接的开销,真正异步,仅需要发消息时建立 http 链接。

只是突发奇想,还没有深入研究双向通信、长连接、websocket 等的原理。欢迎懂的大大砸砖抛我~~???

    原文作者:FingerLiu
    原文地址: https://segmentfault.com/a/1190000009253418
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞