使用阻塞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请求来实现发布/订阅 的相关文章

  • 如何使用继承来建模 RESTful API?

    我有一个需要通过 RESTful API 公开的对象层次结构 但我不确定我的 URL 应该如何构建以及它们应该返回什么 我找不到任何最佳实践 假设我有从动物继承的狗和猫 我需要对狗和猫进行CRUD操作 我还希望能够对一般动物进行手术 我的第
  • 对不存在的资源进行 GET 的 REST 标准

    资源 user 12345 不存在 假设消费者随机尝试不同的 id 没有授权 任何用户都可以查看任何用户 从更广泛的意义上来说 我的问题是 如果对不存在的资源执行 GET 操作 您应该返回什么 我应该为不存在的 id 返回空用户 还是应该返
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 从同步上下文调用异步方法

    我在代码中通过 HTTP 调用服务 最终使用 HttpClient SendAsync 方法 然后从 WebAPI 控制器操作调用此代码 大多数情况下 它工作得很好 测试通过 但是当我在 IIS 上部署时 我遇到了死锁 因为异步方法调用的调
  • 带点 (.) 的 Spring MVC @PathVariable 被截断

    这是问题的延续Spring MVC PathVariable 被截断 https stackoverflow com questions 3526523 spring mvc pathvariable getting truncated S
  • 为什么等待冷任务不会抛出

    我只是在尝试看看当一个冷任务 即一个任务 时会发生什么Task尚未开始 正在等待 令我惊讶的是 代码永远挂起并且 完成的 永远不会被打印 我希望抛出异常 public async Task Test1 var task new Task g
  • 如何绕过 ASP.NET Web API 中发现多个操作的异常

    当试图找到以下问题的解决方案时 默认操作的 MVC Web Api 路由不起作用 https stackoverflow com questions 11724749 mvc web api route with default actio
  • Rails、REST 架构和 HTML 5:带有预检请求的跨域请求

    在致力于使我们的网站 HTML 5 友好的项目时 我们渴望采用跨域请求的新方法 不再通过隐藏的 iframe 发布 使用访问控制 http www w3 org TR access control 根据规范 我们开始设置一些测试来验证各种浏
  • javascript 中对象的“异步”循环

    通常 我们可以对数组和对象进行循环来迭代属性 值 但循环是阻塞的 但是 超时可用于模拟异步循环 我设法为数组做到了这一点 http jsfiddle net LHhy2 do stuff function asyncLoop i do st
  • Chrome 扩展同步调用 - 仅在窗口关闭后创建窗口

    我有这个代码 function voteNewWindow mailNum chrome windows create url http www google com incognito true function window conso
  • 嵌套异步/等待 Nodejs

    似乎无法弄清楚为什么这对我不起作用 我有一个父函数 它对子加载进程执行 AWAIT LOAD 进程又调用另一个名为 LOADDATA 的 AWAIT 所以基本上是这样的 module exports async function try a
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • 我可以在 Play Framework 2.x (Scala) 中进行异步表单验证吗?

    我正在努力了解 Play 的异步功能 但发现在异步调用适合的地方以及框架似乎密谋反对其使用的地方存在很多冲突 我的例子与表单验证有关 Play 允许定义临时约束 请参阅文档 val loginForm Form tuple email gt
  • jersey 2.2:ContainerResponseFilter 和 ContainerRequestFilter 永远不会被执行

    按照泽西岛网站上的入门指南进行操作 我执行了以下构建命令 mvn archetype generate DarchetypeArtifactId jersey quickstart grizzly2 DarchetypeGroupId or
  • 为 NFL api 生成访问令牌

    NFL 有一个 API 服务 link https api nfl com docs getting started index html https api nfl com docs getting started index html
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择

    There a lotSilverlight 应用程序连接回其服务器的不同方式 包括 WCF Windows 通信基础 http msdn microsoft com en us netframework aa663324 aspx RES

随机推荐

  • 返回对 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