作为一个开发者,你可能已经利用过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. C++内存模型&空指针、野指针、函数指针和回调函数

    C++内存模型&空指针.野指针.函数指针和回调函数 C++内存模型 栈与堆的区别: 1.管理方式不同 栈是系统自动管理的,在超出作用域后,将自动被释放 堆是手动释放,若程序中不释放,程序结束后 ...

  2. 微信小程序常用的view、text、button、image组件

    [黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)] https://www.bilibili.com/video/BV1834y1676 ...

  3. Spring Cloud 之OpenFeign

    Spring Cloud 之OpenFeign 一:简介 ​ Feign是一个声明式(对比RestTemplate编程式)的服务客户端,即通过@FeignClient注解即可声明一个接口(interf ...

  4. linux_mint_21 vim配置:剪贴板支持和输入法自动切换

    一.vim的剪贴板支持 有的vim版本不支持系统剪切板,也就是说在vim编辑器外面复制的内容,不能够粘贴到vim中;在vim中通过yy.d.c复制剪切的内容也不能粘贴在vim编辑器外面. 这实在是有点 ...

  5. Vue详解----一篇带你从头领悟到尾,享受飞升的感觉

    脚手架文件结构 """ ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ...

  6. Java 生态需要新鲜的血液、需要狂飙的刺激。Solon v2.4.1 发布

    Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢 ...

  7. Kitex微服务开发实践(ETCD服务注册)

    服务注册通常用于分布式系统或微服务架构中,是一种用于管理和发现这些分布式服务的机制.它的目标是让服务能够动态地找到其他服务,并能够与其进行通信,而无需显式地配置其位置信息 本文简单讲述使用etcd进行 ...

  8. Tcpdump 使用指南

    论网络数据包的分析,我首选wireshark,因为图形化界面直观明了.但如果遇到没有图形化显示的Linux环境,那么此时会使用tcpdump该是一件多么美好的事情. 网上关于tcpdump的介绍很多, ...

  9. [go]封装go的docker镜像

    前言 多阶段封装docker镜像,使用scratch镜像,尽量减小镜像包的体积. 封装用于编译的go镜像 Dockerfile FROM golang:1.20.1 AS builder WORKDI ...

  10. JS标识符

    什么是标识符? 变量名 函数名 属性名都称为标识符. 定义标识符规范如下 1) 标识符只能由字母 数字 下划线 $组成. 2) 标识符不能以数字开头,例如: 1name. 3) 标识符不能实JS中的关 ...