【问题标题】:Remote call to a PlayFramework object远程调用 PlayFramework 对象
【发布时间】:2011-07-04 16:10:25
【问题描述】:

我正在寻找一种通过远程 JVM 将序列化对象(或简单的字符串)发送到 PlayFramework 模型或控制器对象的方法。

我正在尝试创建一个基于推送事件的 Web 应用程序,所以目前,当一些事件被添加到模型中时,可以通过长轮询 ajax 调用来获取新事件。

现在,我想通过 RMI、套接字或任何可行的方法从远程 JVM 将事件添加到我的模型中。我在 PlayFramework 文档中进行了搜索,但没有找到任何关于如何执行此操作的 API 或代码。

【问题讨论】:

    标签: java sockets rmi playframework


    【解决方案1】:

    你可以使用 WebSockets,我在这里写了一篇关于它的博客文章: http://geeks.aretotally.in/log4play-log4j-ui-mashed-up-with-play-framework-knockout-js-and-websockets

    我的示例仅从服务器推送到客户端,但您可以使用 WebSockets 通过 JSON 进行双向通信: http://www.playframework.org/documentation/1.2.1/asynchronous#UsingWebSockets

    您还可以使用 Akka Remote Actors (http://akka.io/docs/akka/1.1.3/scala/remote-actors.html)。

    【讨论】:

      【解决方案2】:

      将数据推送到服务器不是一件容易的事吗?

      自然的方法是调用一些控制器操作(读取:HTTP POST),接受 JsonData 对象(如果数据是结构化的)或普通参数(如果数据是非结构化的)。

      在我的脑海中,在游戏中它看起来像这样:

      WSRequest request = new WSUrlFetch().newRequest("http://<url of your 'vm'>");
      // request.setParameter("param", value);
      // ...
      request.post();
      

      您不需要 WebSockets。

      【讨论】:

      • 是的,这很简单,你根本不需要 WebSockets,只是让他知道一些他可能还没有偶然发现的选项;如果浏览器支持不是问题,WebSockets 也将避免长时间轮询,避免其浪费的调用,并重用连接来进行推送。
      • 是的,你是对的,WebSockets 对于 HTTP 消费者来说完全有意义。如果所有基础设施组件都协作,他肯定可以从长轮询切换到 WS。但是外部事件生产者(他的远程虚拟机)无论是否播放都可以只发出一个传统的请求来为 WS 频道生成事件。
      • 我不想(并且被告知不要)使用一些不成熟的技术,比如 WebSockets,因为它们还没有被几乎所有的网络浏览器支持,而且标准仍然是由 W3C 制定的。但是使用长轮询的前端/后端通信问题已经解决了,我现在专注于 WS/后端通信。为了恢复我的架构,我有一个 Web 后端通过长轮询将事件推送到我的前端。推送的事件来自一个独立的 Web 服务,在被推送到前端之前,必须将它们放入后端的“缓冲区”中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多