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 发请求。
分割
或者说,如果在客户端上实现这个不太可能,或起一个 http server 不好保活,或费电因而意义不大的话,
把 A 和 B 都假设为服务器,在两台服务器间实现这样的基于 http 的双向通信有没有意义呢?
与传统长连接实现的双向通信相比,代价当然是 A 和 B 都需要启一个服务端口。好处是纯 http 实现,而且不需要维护长连接的开销,真正异步,仅需要发消息时建立 http 链接。
只是突发奇想,还没有深入研究双向通信、长连接、websocket 等的原理。欢迎懂的大大砸砖抛我~~
idea: 纯 http 上的双向通信的更多相关文章
- 如何在SharePoint 当中使用纯JSOM上传任意二进制文件(小于2MB)
在微软的官方网站上有关于如何在SharePoint当中使用JS创建一个简单的文本文件的例子,经过我的思考我觉得结合Html5特性的浏览器,是完全可以通过JS来读取到文件的内容的(这一部分的内容请大家自 ...
- 利用servlet3.0上传,纯原生上传,不依赖任何第三方包
tomcat7里面自带的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上传,异步等等.... 如果你的tomcat版本低于7的话,单独在项目中引入serv ...
- 纯js上传控件——fineuploader
fineuploader是一款基于ajax实现文件上传的插件,具有以下有点: A:支持文件上传进度显示. B:文件拖拽浏览器上传方式 C:Ajax页面无刷新. D:多文件上传. F:跨浏览器. E:跨 ...
- 纯js上传文件 很好用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- fromdata上传文件,ajax上传文件, 纯js上传文件,html5文件异步上传
前端代码: 上传附件(如支付凭证等) <input type="file" name="fileUpload" id="fileUpload&q ...
- 使用Git上传项目代码到github
github是一个基于Git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.这对于一般人来说公共仓库就已经足够了. 注册账户以及创建仓库 要想使用gi ...
- 前端笔记之ES678&Webpack&Babel(上)初识ES678&Babel&let和const&解构&语法
一.ES版本简介和调试运行方法 1.1 ECMAScript简介 MDN手册:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript JavaS ...
- Git的使用--如何将本地项目上传到Github(三种简单、方便的方法)
一.第一种方法: 1.首先你需要一个github账号,所以还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路(傻瓜式安装) ...
- 如何用git上传代码到github详细步骤
注册账户 这个小菜鸟带着心跳写的第一篇博客! 还请大家多多提点! 想使用github,第一步肯定是要注册github账号,有了账号就是直接登录啦 可以直接打开http://github.com页面注册 ...
随机推荐
- python调用SOA服务
python调用SOA服务,运用suds模块 #! /usr/bin/python # coding:gbk import suds,time,sys reload(sys) sys.setdefau ...
- 页面异步发送json数据封装controller方法形参 pojo中,使用@requestBody和不使用它页面的异步方式不同之处
方式一: 使用@requestBody 方式二 : 直接封装到pojo的方式
- 【Android】TextView文字长度测量和各种Paddding解析
老规矩,先上张图 o,这篇好像是分析篇,没有效果图.不管了,位置占着,老规矩不能坏,下面开始正文. *** 这篇博客会讲得比较杂: TextView里各部分的大小该怎么测量? 如何计算每行文字的长度? ...
- 如何用正确的姿势查看 主机系统的CPU信息
一.关于CPU的几个概念 CPU的作用 计算机中的中央处理单元(CPU)执行基本的计算工作 -- 运行程序.但是,一个单核的CPU同一时间只能一次执行一个任务,为了提高计算机的处理能力,也就出现了多C ...
- linux下大于2T的硬盘格式化方法
我们先在超级用户模式下用fdisk -l命令查看挂载的硬盘设备,假设设备号为/dev/sdb,接下来我们使用parted命令来进行GPT分区:1. yum install parted -y# par ...
- css3特效
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- js华氏度转为摄氏度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CentOS7.2 初始化
##安装wget,linux默认最小版本不会安装wget yum -y install wget ##安装文件上传下载到服务器的小工具 yum -y install lrzsz ##安装网络工具包 y ...
- XML和JSON两种数据交换格式的比较
在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...
- 动态代理的两种实现方式(JDK/Cglib)
=========================================== 原文链接: 动态代理的两种实现方式(JDK/Cglib) 转载请注明出处! ================== ...