Playframework Play框架对客户端/服务器状态的同步有什么支持?

Playframework Play框架对客户端/服务器状态的同步有什么支持?,playframework,Playframework,Play框架看起来非常有趣,但它鼓励服务器端的最小状态。我的问题是如何轻松地同步客户端状态和服务器状态?如果我想拥有服务器状态,比如在开发聊天应用程序时,保持服务器状态并同步客户端和服务器状态有多容易或困难?Play是一个框架,意味着没有服务器会话和服务器状态。理想情况下,每次请求时,都会从后端数据库(SQL或NoSQL)检索所有状态信息。但是,如果某些数据在一定时间内不会更改,您也可以使用加速。通常,缓存对象由一个特殊的字符串加上会话id进行键控。请记住,这里的会话不是Java EE世界中的会

Play框架看起来非常有趣,但它鼓励服务器端的最小状态。我的问题是如何轻松地同步客户端状态和服务器状态?如果我想拥有服务器状态,比如在开发聊天应用程序时,保持服务器状态并同步客户端和服务器状态有多容易或困难?

Play是一个框架,意味着没有服务器会话和服务器状态。理想情况下,每次请求时,都会从后端数据库(SQL或NoSQL)检索所有状态信息。但是,如果某些数据在一定时间内不会更改,您也可以使用加速。通常,缓存对象由一个特殊的字符串加上会话id进行键控。请记住,这里的会话不是Java EE世界中的会话,它纯粹是从客户端cookie反序列化的字符串。

播放包括一个示例,这是一个很好的起点。

对于标准web应用程序,状态保存在cookie中,在数据库中或缓存中(请记住,缓存不可靠,如果缓存不包含所需的数据,则必须从DB访问)。因此,在服务器端会话中没有任何内容保持在状态

然而,对于聊天类型应用程序的播放应用程序来说,这里有一点细微的差别,即什么是无状态的。如果您查看早期版本的Play中的聊天应用程序(在Websocket支持之前),您会发现所有“Message”对象都是聊天中的单独行,存储在数据库中。但是,在包含WebSocket支持的最新版本中,您会发现聊天状态存储在Singleton对象中,该对象将持续聊天的输入长度

游戏开发者的观点是Websocket通信,因此完整的聊天可以被认为是一个单一的请求,通过许多来回的通信。因此,将状态保持在服务器端的单例中不会违反无状态体系结构的规则。之所以如此,是因为一旦建立了websocket通信,套接字上的对话将始终在客户端和单个服务器之间进行,直到websocket关闭