如何使用 Atmosphere 框架调用传统的 REST-RPC 调用?

Posted

技术标签:

【中文标题】如何使用 Atmosphere 框架调用传统的 REST-RPC 调用?【英文标题】:How to invoke a conventional REST-RPC call with the Atmosphere framework? 【发布时间】:2013-04-04 18:18:45 【问题描述】:

如何使用 Atmosphere 1.1.0+ 以传统的 RPC 方式将 POST/PUT/DELETE 调用发送到休息源? (你猜对了,我想在我的项目中使用 pub/sub 和 RPC 风格)

服务器端:注册一个@Path(例如/member),用@POST/@PUT/@DELETE标记,处理方法体和return值。似乎直截了当。即使使用 JSON 编码/解码。

clientside:你将如何使用 wasync 库启动 POST 请求?所有大气示例都使用“GET”,建议仅使用 GET。这是为什么呢?

RequestBuilder request = client.newRequestBuilder().method(Request.METHOD.GET).uri("/member") 

在调用 fire 方法时可以期待这种同步的服务器响应吗?例如

Future future = socket.fire(myMemberObject)

感谢您提供有关此方法的提示和 cmets(也欢迎对 RPC 和 PubSub 配对的想法)。

【问题讨论】:

【参考方案1】:

一旦建立连接,wAsync 就会使用 POST。 wAsync 本质上是异步的,因此如果要使其阻塞,则需要使用 Latch,或者将 AsyncHttpClient 与 Future 一起使用。

【讨论】:

谢谢。我检查了你的例子。说得通。不过,我还不清楚一些实现。如果 wAsync 调用(打开套接字,调用 fire 方法)REST 资源方法,Atmosphere-Jersey 服务器端如何返回即时(但异步)响应?它使用 return 语句,不是吗?此响应后 websocket 连接是否终止?如果不是,为什么不呢?如果是,您如何仍然与 wAsync 客户端通信?引导我进入下一个问题:如何将消息从服​​务器发送到先前订阅的客户端(@Subscribed 的 Atmosphere-REST 资源)? 我确实理解了您的聊天示例,其中客户端向@Subscribe-annotated REST 资源发送消息,并且此消息会立即返回给先前订阅的所有其他客户端。好吧,但是服务器如何将这些消息之一发送给订阅用户?如何重复向这些订阅者发送消息?在 Atmosphere-Jersey 的这个 PubSub 实现中我错过了什么?感谢您的 cmets 以及关于如何以(异步)REST 样式使用 Atmosphere 和 wAsync 的建议。 最后一个问题:使用 wASync 在套接字上向 Atmosphere REST 资源发送消息,我可以在返回对象 Future 中期待什么?什么都没有,因为它是异步的,正如您在回答中提到的那样?抱歉,我也不清楚。 我需要写一篇博文,用其他示例解决和说明我的问题。即 wasync 和氛围的最佳实践。

以上是关于如何使用 Atmosphere 框架调用传统的 REST-RPC 调用?的主要内容,如果未能解决你的问题,请参考以下文章

重新连接到服务器时如何强制 Atmosphere.js 使用首选传输?

具有每个请求问题(Hibernate 和 Shiro)的 WebSocket(Atmosphere) - Vaadin

Atmosphere Jersey 资源调用永远不会触发 WebSocketTextListener 的 OnMessage 方法

Atmosphere Jersey - 服务器消息

如何在本地安装 Meteor Atmosphere 软件包以便对其进行修改?

使用 java 和 Atmosphere 的基本聊天应用程序