我正在尝试使用Scala来使用Play框架。
对于小型项目,我的首选框架目前是Tornado。我使用它是因为它使用websockets是多么容易。以下是我在Tornado中使用websocket处理程序的方法:
class SocketHandler(tornado.websocket.WebSocketHandler):
"""
Handles websocket connections.
"""
CLIENTS = set()
def open(self, *args, **kwargs):
self.CLIENTS.add(self)
self.send_data() // Perform special "on open" action.
然后,对于每个收到的消息,我都会从websocket类中执行此操作:
def some_action(self, message):
do_things()
self.write_message(response_data) # If needed.
如果我需要更新所有客户端的偶数,我会这样做:
new_data = database_callback_that_affects_all_clients()
for client in SocketHandler.CLIENTS:
try:
client.write_message(new_data)
except WebSocketClosedError: pass # You can't always be sure which ones are closed.
一个案例将数据发送回发出请求的套接字,一个案例将数据发送到所有websockets。但我在两种情况下使用相同的套接字。
通过Play,我该如何处理这种区别?
Websocket文档网页中的示例显示了如何将消息发送回发件人,聊天示例应用程序显示了如何使用BroadcastHub.sink
对象向所有内容发送消息。但是如果你需要同时做两件事情呢?
Set
ActorRef
个物品,就像龙卷风一样?这似乎是玩游戏的最小方式。如果正确的解决方案是第二个,我猜这个游戏需要打开两个websockets。