使用阻塞REST请求来实现发布/订阅

2024-03-11

最近,我被要求调查与电话系统供应商集成的可行性,该供应商希望使用 RESTful Web 服务提供电话事件(例如线路振铃、分机应答、呼叫清除)。

我指出 REST 是一个请求/响应协议,他们正在执行发布/订阅。他们建议的解决方案是发出 HTTP REST 请求,该请求将被阻止,然后在事件可用或超时时最终响应。

无论哪种方式,都会发出另一个请求来获取下一个事件,依此类推。

这个想法让我感到畏缩,但我确信 iPhone 的“推送”电子邮件就是这样运作的。

这是 REST 的合理使用吗?


我想说它不太适合 REST 架构风格(主要是因为 REST 将其限制为无状态客户端服务器交互)。然而,网络上有大量进行长轮询的解决方案,尽管不符合网络的精神,但它或多或少有效。

首先,关于架构的说明:在 REST 中实现 pub/sub 仅意味着发布者将项目添加到列表中,然后该列表可供订阅者使用。订阅者对列表进行投票。有多种方法可以确保一次且仅一次,同时保持消息顺序and(一种形式)保证交付,尽管是异步的。它的扩展性非常好,而且非常有弹性。

我的第一条建议是使其成为可选的,以便无法执行长轮询(或不想)的客户端可以这样做。我什至会说,如果通用客户端(如 Google),默认值将是not执行长轮询,并且服务器通过客户端和服务器之间的特殊共享理解来启动长轮询。这种共同理解可以是自定义媒体类型或自定义链接关系,甚至是通用客户端不知道的自定义 HTTP 标头。支持您的长轮询的客户将被编码为发现长轮询的功能,并根据需要调用它,如果长轮询失败(例如,中介以某种方式阻止它),则返回到常规轮询。

我建议不要尝试在 HTTP 之上执行此操作,而是使用非 HTTP 套接字,以免违反 HTTP 的意图并有效地使用 HTTP 作为传输协议。参见彗星。

我的另一条建议是问你的客户必须有多“实时”。如果几秒钟的延迟是可以接受的,那么您可以进行大量的定期轮询,即使对于大量的客户端也是如此,因为使用定期轮询解决此问题的可缓存性质。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用阻塞REST请求来实现发布/订阅 的相关文章

  • 在Android的IntentService中等待异步回调

    我有一个IntentService在另一个类中启动异步任务 然后等待结果 问题是IntentService将尽快完成onHandleIntent 方法已经运行完毕了 对吗 这意味着 通常情况下 IntentService异步任务启动后会立即
  • 流多播 - 读取一次流,但以不同的方式处理它,并使用最少的缓冲

    为了可扩展性和节省资源 最好避免将整个输入流读入内存 而是尝试将其作为流处理 一次读取小块 当您想要对数据执行一件事 例如从 Web 请求中读取数据并将其保存到文件中 时 这在 NET 中很容易实现 简单的例子 input CopyTo o
  • 如何访问 NFL 的 API?

    我一直在尝试访问或设法访问 NFL com 的数据 但尚未找到 这些网站上有公开文档 https api nfl com docs identity oauth2 index html 但这些文档不会告诉您如何获取客户端 ID 或客户端密钥
  • 如何使实体框架存储过程异步?

    我有一个函数 ReturnStatementDetailsForSubRepAsync 它使用一个 linq 表达式 我可以使用内置函数轻松地使其异步 例如 ToListAsync 现在 因为此 LINQ 函数是异步的 所以我必须使父函数异
  • 在应用程序中注册API

    通过 django rest framework 我正在使用DefaultRouter 我想为多个应用程序提供 API 所以我的问题是我能否以 django 方式执行此操作 并将我的路由器注册放入每个应用程序 URLconf 中 并让它们显
  • WCF 服务契约将被 XML 和 Json 序列化

    我如何创建要加入的服务合同XmlSerializer 格式也WebMessageFormat Json在 WCF RESTful 服务中 我需要的是从 ASP Net 1 1 的代码后面调用 CallADSWebMethod 操作契约 该契
  • LoaderManager 不接受“这个”

    好吧 我投降 我想不明白 我正在学习 Udacity 的 Android 基础知识课程 需要了解如何使用加载器加载数据 但是 当我使用以下行时 this 以红色突出显示并显示以下错误 Wrong 3rd argument type Foun
  • 找不到可接受的代表

    我是 Spring Boot 的新手 我可能会犯一些愚蠢的错误 所以提前对此类问题表示歉意 我正在尝试编写接受以下 JSON 的 POST API id null a 1 3 b somestring mapJson monday 10 0
  • 如何向最终用户隐藏 REST API Url?

    是否可以隐藏我通过 AJAX 用于填充页面数据的 REST URL 我不希望其他人从我的 REST API 获取和使用 但需要使用它在我的网站中显示内容 如何向最终用户隐藏我的 REST API URL 无法在 JavaScript 中向最
  • 等待 AsyncMethod() 与等待等待 Task.Factory.StartNew(AsyncMethod)

    给出以下方法 public async Task
  • 当用户在springboot中调用注册休息API时如何获取oAuth2访问令牌?

    目前我正在研究 Springboot 安全性 这对我来说相当新 我跟着youtube视频教程 当我使用以下代码片段时 我成功获取了 oauth2 access token SpringBootApplication public class
  • 如何使用放心获取 Rest API 中的授权令牌?是否可以?

    目前使用 Postman 我必须向 API URL login 发送请求 并传递用户名和密码 作为回报 我得到令牌 如下所示 请求示例 login POST Body username admin password admin Return
  • 如何触发应用程序通过 REST 服务获取数据?

    我正在寻找一种方法来触发应用程序从远程 REST 服务获取数据 该方法不需要轮询 iOS 推送通知似乎不是一个选项 因为它可以被用户停用 然而 我可能是错的 是否有最佳实践来完成此任务 实际上 推送通知是可行的方法 在 ios8 及更高版本
  • 等待多个异步调用完成后再继续

    因此 我有一个加载页面 并通过 jquery get 发出多个请求以使用其值填充下拉列表 function LoadCategories Category LoadPositions Position LoadDepartments Dep
  • 如何在 Codeigniter 中我自己的控制器中生成 API 密钥

    只是想提一下 我确实是 API 开发 概念 结构 最佳实践 方面的新手 我对它一点也不熟悉 所以如果您发现我正在使用 Phil 请原谅我可悲的愚蠢问题Sturgeon 的 REST API 服务器 Curl 库和 REST API 客户端这
  • Django REST Framework:无法使用视图名称解析超链接关系的 URL

    我已经广泛研究了这个相当常见的问题 但没有一个修复对我有用 我正在 REST 框架中构建 Django 项目 并希望使用超链接关系 用户可以拥有许多独立的汽车和路线 路线是位置的集合 这些是我的序列化器 class CarSerialize
  • 使用 JWT 创建 PostMan GET 请求

    我是 PostMan 的新手 通常我使用curl 这是获得 JTW 的一个 curl X POST H X Requested With XMLHttpRequest H Content Type application json H Ca
  • 未捕获 Func<> 的异常(异步)

    我有以下代码 为了进行此重现而进行了简化 显然 catch 异常块将包含更多逻辑 我有以下代码 void Main var result ExecuteAction async gt Will contain real async code
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的

随机推荐

  • 返回对 C++11 中复数的实数或图像值的引用的函数

    我正在寻找一个函数 该函数返回对 C 11 中复数的实数或图像值的引用 在 C 03 中我可以说 complex
  • 如何将多个类映射到休眠中的一张表?

    根据我的研究 这似乎不太可能 但这是我的用例 我有一个名为 user 的表 其中包含地址 id 我想将 UserReference 和 User 类映射到此表 其中 UserReference 不包含 Address 对象 以节省 sql
  • 在 MacOS arm64e 中安装 php-decimal 并无法获取 libmpdec

    我刚刚升级到带有 M1 的 MacBook 并在安装 php decimal 时使用pecl install decimal 我收到以下错误 checking for libmpdec custom path no checking for
  • 自动配置失败,尝试从 VS 2022 选择自动配置时请检查日志

    I am getting the following error and cannot get past it I also see this issue which I think has something to do with it
  • 简单 XML - 处理节点中的冒号

    我正在尝试从 Flickr 读取 RSS 提要 但它有一些简单 XML 无法读取的节点 media thumbnail flickr profile 等等 我该如何解决这个问题 当我查看 DOM 的文档时我很头疼 所以我想避免它 因为我不想
  • 在 Python 中规范化名称列表

    假设我有一个姓名列表 names King ARTHUR Lancelot The brave galahad the pure Servant patsy GALAHAD THE PURE 我如何规范化列表 以便 the 始终为小写 并且
  • Typescript 中的 Intersection Observer 在 useRef 中抛出错误

    我这里有一个运行完美的文本动画 我现在要添加的是一个 Intersection Observer 这样动画只有在我向下滚动到 Box 时才开始 所以我为实现这一目标所做的是 我使用了反应钩子useRef用作我想要观察的元素的参考并将其应用到
  • 如何在 xcode 6 (swift) 中创建没有情节提要的项目?

    任何人都可以练习在 xcode6 swift 中创建没有故事板的项目吗 我有能力实施 func application application UIApplication didFinishLaunchingWithOptions laun
  • 将多个 Excel 文件中相同结构的工作表追加到一个中

    我想将多个 Excel 文件合并为一个 我想要合并的 Excel 文件具有相同的工作表 所以在这一点上 我想合并不同 Excel 文件中的相同工作表 我有这段代码要组合 但是此代码仅组合了 Excel 文件中的最新活动工作表 Sub sim
  • Firefox 和远程 XSL 样式表

    我正在尝试使用远程 XSL 样式表加载本地 XML 文件 IE 似乎可以很好地处理这个问题 但 Firefox 却不行 有解决办法吗 如果不是语法问题 我认为这是一个同源政策问题 火狐浏览器 和还有 Chrome 和 IE9 https s
  • 定义函数参数的默认值

    在 Lua wiki 中我找到了一种为缺失参数定义默认值的方法 function myfunction a b c b b or 7 c c or 5 print a b c end 这是唯一的方法吗 PHP 风格myfunction a
  • CMake:无法运行 MSBuild 命令:MSBuild.exe

    我正在尝试建立FIAT https ethiy github io FastImageAnnotationTool using CMakeWindows 10 上的 GUI CMake Error at CMakeLists txt 3 p
  • 创建一个 Swift Dictionary 子类?

    我可以子类化一个Swift Dictionary这样我就可以通过我的习俗Dictionary到期望普通的方法Dictionary Edit 就我而言 我想要我的定制Dictionary按插入顺序迭代其键 https stackoverflo
  • 我的 foursquare 身份验证、回调 url 和应用程序网站是什么?

    我试图将 foursquare API 集成到我的 iPhone 中 但一开始就卡住了 注册我的应用程序 它要求我提供callback url和应用程序网站 以便注册我的应用程序并获取我的身份验证代码 但我不明白我应该为这些链接输入什么 因
  • ODP.NET程序编译

    当我尝试使用 ODP NET 执行创建过程时 我收到 ORA 24344 成功但出现编译错误 但是 当我在 SQL Developer 中运行相同的语句时 它编译成功 有谁知道我需要更改什么才能编译我的程序 是字符集问题吗 我使用的是 Or
  • Apache Wink Accept() 失败并出现 NullPointerException

    我正在使用 Wink 1 2 在 jBoss EAP 6 1 7 2 1Final 上部署 RESTful Web 应用程序 并在所有请求上出现以下异常 b JBWEB000070 exception b pre java lang Nul
  • JSF“记住我”选项

    在其他语言中 当用户登录时 您可以将 cookie 的过期日期设置为与今天相差甚远 并且您可以实现此目的 我如何在 JSF2 中实现这个 我有一个 jsf sessionscoped bean 但是如何才能长时间维持这个会话呢 您也可以使用
  • 如何修复Hyperledger Fabric中“执行End-2-End场景失败”的问题?

    我正在尝试运行此处提供的 Fabric 示例 https github com hyperledger fabric samples tree release 1 2 first network https github com hyper
  • 从 Java 创建快捷链接 (.lnk)

    我正在用 Java 编写一个安装程序 启动器 并且需要能够在此过程中在用户桌面上创建快捷方式 我对任何想法都感兴趣 认为这是实现这一目标的最佳方法 我考虑过的一个选择是在 Windows 上使用 VB 脚本并使用本机 shortcut ex
  • 使用阻塞REST请求来实现发布/订阅

    最近 我被要求调查与电话系统供应商集成的可行性 该供应商希望使用 RESTful Web 服务提供电话事件 例如线路振铃 分机应答 呼叫清除 我指出 REST 是一个请求 响应协议 他们正在执行发布 订阅 他们建议的解决方案是发出 HTTP