作为一个开发者,你可能已经利用过REST API来构建和集成各种应用。REST API是基于HTTP协议的交互模式,它使得客户端和服务器可以通过请求和响应来进行数据交换,简单、灵活、通用。

然而,当你开发实时应用,如IM聊天、协作等应用时,意味着客户端需要不断向服务器请求才能获取到最新数据,这将浪费大量网络流量和资源,导致数据延迟。要么采用复杂的WebSocket协议,但无疑会增加开发的难度和成本。为此,我们是否能找一种更简便、低成本的解决方案呢?答案是肯定的,它就是Pushpin。

什么是Pushpin?

Pushpin是用Rust和C++编写的反向代理服务器。它可以让你在不修改后端代码的情况下,为你的REST API添加实时通信功能。它支持WebSocket、HTTP流和HTTP长轮询等多种实时协议,让你的前端和后端之间实现双向通信。

Pushpin不会缓存数据,不会影响应用程序的数据模型,也不会绑定您的 API 定义。它只是一个中间层,让后端能够根据自己的数据模型来处理客户端的请求。客户端也不必关心“频道”或“消息”的概念,只要发送 HTTP 请求或 WebSocket 帧,后端就能根据这些输入来推送实时数据。

Pushpin如何工作?

Pushpin它作为一个中间层,接收前端发来的请求,并转发给后端。如果后端返回了一个普通的HTTP响应,Pushpin就直接返回给前端。如果后端返回了一个特殊的响应,比如带有Grip头部或者带有订阅信息,Pushpin就会保持连接,并等待后端通过控制API推送数据给前端。

这样一来,你就可以在后端使用任何语言和框架来开发REST API,而不需要关心实时协议的细节,只要你按照Pushpin提供的规范来返回响应和推送数据,Pushpin就会自动为你处理好前端和后端之间的实时通信。

Pushpin能做什么?

Pushpin非常适合各种设置,因为它充当代理服务器和发布-订阅代理。

1、代理
最基本的设置是将Pushpin放在典型的Web服务后端前面,后端将数据直接发布到Pushpin。Web服务本身可能会发布数据以响应传入的请求,或者可能存在某种发布数据的后台进程/作业。

2、 使用API管理
可以将API管理系统与Pushpin结合使用。将Pushpin放在前面,以便API管理系统不会受到长期连接的影响。此外,Pushpin可以将WebSocket协议转换为HTTP,允许API管理系统对转换后的数据进行操作。

3、 使用消息队列
如果要推送大量数据,则可能需要引入中间消息队列。这样,后端进程可以将数据一次性发布到消息队列,队列再通过适配器将数据中继到一个或多个Pushpin实例。Pushpin能够将订阅信息转发到此类适配器,以便消息能发送到具有给定通道订阅者的Pushpin实例。

4、 微服务

在微服务环境中,Pushpin可以轻松侦听来自其他微服务的即时更新,而无需集中式消息代理。每个微服务都有自己的Pushpin实例,微服务通过组织自己的API协定而不是特定于供应商的机制相互通信。5、 作为大型 CDN
由于Pushpin实例互不通信,并且消息传递可以分层,这意味着Pushpin实例可以在地理上分布以创建实时推送 CDN。客户端可以连接到最近的区域边缘服务器,事件可以从数据源辐射到边缘。

为了方便集成,提供有许多后端语言和框架的库:

Pushpin在Apache许可证 2.0 版下获得许可,它是一个让你的REST API变成实时API的神器,它可以为你的应用添加实时通信功能,无缝地与现有的REST API集成。它支持多种实时协议,可以和任何语言和框架配合使用,还提供了高效稳定的服务。如果你想要开发一个实时的应用,不妨试试Pushpin!

项目地址:https://pushpin.org/   文档地址:https://pushpin.org/docs/about/  源码地址:https://github.com/fastly/pushpin

写作不易,转载请注明博文地址,否则禁转!!!

感谢阅读,点赞+分享+收藏+关注
文章出自猿惑豁微信公众号

Pushpin:开源即时通信神器,让你的API秒变实时API,轻松实现WebSocket,HTTP流和HTTP长轮询等服务的更多相关文章

  1. 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信

    两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...

  2. Web 通信 之 长连接、长轮询(转)

    Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强 ...

  3. Web 通信 之 长连接、长轮询(long polling)

    基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...

  4. Web 通信 之 长连接、长轮询(long polling)(转)

    基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...

  5. [转]Web 通信 之 长连接、长轮询(long polling)

    本篇文章转载自Web 通信之长连接.长轮询(longpolling),版权归作者所有. 转者按:随着技术的发展,在HTML5中,可以通过WebSocket技术来完成长连接的开发,虽然如此,本文依然存在 ...

  6. Web 通信 之 长连接、长轮询(long polling)(转载)

    基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...

  7. Web 通信 之 长连接、长轮询(转)

    Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强 ...

  8. 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室

    实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSoc ...

  9. Web通信之:长轮询(long-polling)(转)

    Web通信之:长轮询(long-polling) “轮询”是个耐人寻味的词,第一次看到它的时候我就直接理解为“轮流查询”了.但是看到了英文才知道这个是网络通信专业的术语.轮询,其实就是一群人在排队买东 ...

  10. 中秋礼物!开源即时通信GGTalk安卓版全新源码!

    经过连续两个多月的努力(开发.调试.测试.改bug),我们终于赶在中秋国庆之前能把全新的GGTalk Android版本献给大家. 4年之前我们就推出了GGTalk Android的第一个版本,但是功 ...

随机推荐

  1. selenium实战学习--定位元素

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common import ...

  2. Java扩展Nginx之一:你好,nginx-clojure

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于Nginx扩展 以欣宸自己为例,对一个java程序 ...

  3. .Net FrameWork下面如何生成AOT呢?

    前言 其实AOT预编译,在.Net FrameWorker1.0里面就有了.它叫做Ngen,只不过当时叫做生成本机映像,实际上还是一个东西,也就是预编译.本篇来看下. 概括 1.介绍 现在的现代化的. ...

  4. 新版Google浏览器跨域Cookie解决方案

    一.前言 针对Chrome版本67及以上 不能将其他域的Cookie传递过来 注意,这个里面的SameSite不能设为null,设空的话,还是会走默认值Lax 其中,SameSite的值可以填3个:S ...

  5. 关于No changes detected

    查看app在settings.py文件夹中是否有注册.

  6. 基于C#的窗体阴影效果方案 - 开源研究系列文章

    最近在研究C#的Winform窗体的效果,上次介绍了窗体动画效果的博文( 基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 ),这次将窗体阴影效果的方案进行一个介绍. 找了一下度娘,具 ...

  7. Controller 层代码技巧

    Controller 层代码技巧 前言 本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成: 接口地址(也就是URL地址) 请求方式(一般就是get.post,当然还有p ...

  8. 【NestJS系列】核心概念:Middleware中间件

    前言 用过express与koa的同学,对中间件这个概念应该非常熟悉了,中间件可以拿到Request.Response对象和next函数. 一般来讲中间件有以下作用: 执行任何代码 对请求与响应拦截并 ...

  9. Python操作Redis大全

    一.字符串 string Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET.GET.GETSET.SETEX.SETNX.MSET.MSETNX.INCR( ...

  10. 使用flask开发web应用

    Flask环境搭建 要开发flash应用,我们需要做一些准备工作 我写了个初始化的脚本 Pip_init.sh来安装初始工作 可以到我的git上去下载该脚本进行初始化安装 要启动flask应用,我们需 ...