Java Play 框架中的观察者模式

Posted

技术标签:

【中文标题】Java Play 框架中的观察者模式【英文标题】:Observer pattern in Java Play framework 【发布时间】:2016-04-12 13:00:11 【问题描述】:

我正在用 Java Play 编写一个 Web 应用程序,我的想法是让一个 websocket 连接到服务器,以 JSON 格式发送一堆“实时”数据,然后让另一个 websocket 连接到服务器并收集数据.我正在尝试在这里实现观察者模式,因此服务器将在更新时发送数据。我似乎无法让它工作。

所以我想我是在问如何在 Java Play 应用程序中实现观察者模式。 我曾尝试将此代码放在 onStart 方法中,但我不断收到 InstantiationException,我猜这是因为对象在 WebSocket 连接时被实例化。

WSocket socket = new WSocket(); //Observable
Listener listener = new Listener(socket); //Observer

任何提示将不胜感激!

【问题讨论】:

我可能会提到两个套接字都在工作,即一个套接字可以发送 JSON 数据,另一个可以接收 JSON 数据。 (单独测试。) 你如何处理 Websocket 连接?像playframework.com/documentation/2.5.x/JavaWebSockets 这样的演员?您使用的是哪个版本的 Play? 我正在使用 Play 2.5.1,我目前正在使用回调处理我的套接字 :) 您使用的是哪个 WebSocket 实现?在您的示例中是 WSocket - 但 Play 的实现是 WebSocket。另外:如果您正在使用回调,您可能已经在使用观察者模式。定义回调是最重要的部分。 【参考方案1】:

如果我错了,请纠正我,但我认为你过度设计了一些东西。如果我理解正确,您希望将从一个 WebSocket 连接发送的数据填充到其他活动的 WebSocket 连接。


如果您在 Play 中使用回调,当 WebSocket 准备就绪时,您将同时获得 inout 通道。

您可以做的是收集一些List 中的所有out 频道,每当您收到一些消息时,您只需将该消息广播到您收集的所有out 频道。

如果你有时间考虑用 Akka actor 重写 WebSocket 连接的处理 - 它更容易、更稳定(也很有趣;)

【讨论】:

你完全正确。这个项目非常接近成为意大利面。我尝试将输出频道放在列表中,现在可以了:) 很高兴我能帮上忙 :)

以上是关于Java Play 框架中的观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

观察者模式(从放弃到入门)

java中的回调和观察者模式有啥区别

游戏编程模式--观察者模式

java 设计模式之 观察者模式(Observer)

IOS设计模式-观察者模式

Java设计模式补充:回调模式事件监听器模式观察者模式(转)