如何在play框架2.5.x中减少webSocket数据流



我正在开发一款网页游戏。

服务器端是在Play Framework 2.5上编写的。x (scala)。客户端(JS应用程序)通过websocket与服务器通信。服务器大约每250毫秒向客户端发送一次消息

问题是每个玩家的流量接近16kB/秒,我想尽可能地减少它。

每个消息都是围绕玩家的序列化游戏状态,看起来像这样(实际的json更大,这只是展示了这个想法):

{
"gameState": {
  "player": {
    "id": 218,
    "body": [[42, 20],[42, 21],[43, 21],[43, 20]],
    "name": "player",
    "color": 1,
    "isBot": false
  },
  "food": [[25, 25],[24, 25],[24, 24],[24, 23],[23, 23]],
  "enemies": [{
    "id": 217,
    "body": [[53, 46],[53, 47],[53, 48],[53, 49]],
    "name": "roBot#217",
    "color": 22,
    "isBot": true
    }]
  }
}

我读了几篇文章,认为我必须压缩发送给客户端的消息。所以,我尝试在play应用程序中通过gzip过滤所有响应:

@Singleton
class Filters @Inject() (gzipFilter: GzipFilter, implicit val materializer: Materializer)
extends DefaultHttpFilters(gzipFilter) {
  new GzipFilter(shouldGzip = (request, response) => {
response.header.headers.get("Content-Type").exists(_.startsWith("application/json"))
  })
}

但是这个过滤器不起作用。服务器仍然发送未压缩的数据。我做错了什么?

是否添加了启用gzip过滤器的所有设置?

我没有看到你提到这两点:

1)在build.sbt中添加Play过滤器项目到libraryDependencies:

libraryDependencies += filters

2) Filters类可以在根包中,或者如果它有另一个名称或在另一个包中,则需要在application.conf中使用play.http.filters配置:

play.http.filters = "filters.MyFilters"

并尝试从Filter中删除@Singleton -此注释在过滤器文档中不存在,并且我在项目中也不使用它。

相关内容

  • 没有找到相关文章

最新更新