我们继续之前的讨论 1v1nsx7,其中 u/Xenccc 邀请我们描述一下我们被阻止的具体情况以及我们需要从实时服务的哪些方面。以下是我们案例的详细信息,以及一个正式的域名豁免请求,因为 HTTP Fetch Policy 说:“如果您有一个我们的 Devvit 服务器不支持的用例,请提交您的请求,并提供可能的豁免的详细理由”。

游戏。 NANQUIM(nanquim.gg,仅供技术背景)是一个 2D 战斗游戏,1v1 和最高 8 名玩家/房间。Devvit 应用程序是 nanquim-gg。我们建立并测试了一个离线版本,但决定不发布:游戏只有在线才有意义。我们测量了 webview CSP 在测试中:connect-src 只允许 webview.devvit.net、*.redditmedia.com、*.redditstatic.com、*.redd.it 和 blob:,所以 wss://ws.nanquim.gg 和 https://play.nanquim.gg 都被阻止(securitypolicyviolation connect-src,enforce)。这个帖子是关于将游戏的真正多人模式带入线下。

当前的网络代码(在我们的代码中测量而不是估计)

  • 授权服务器,模拟每秒 60 次。
  • 客户端每秒发送输入(每个玩家 60 个消息,每个玩家最后几个帧重复以容忍丢包)。
  • 服务器每 3 次发送每个玩家房间的全状态快照(20 Hz)。
  • 二进制协议(DataView,大端序列),小消息。
  • 客户端预测和重协调,服务器端反欺骗(输入验证、速率限制、结果验证)。
  • 全球匹配排位,8 个区域,因此玩家匹配到最接近的区域,延迟保持在 100 ms 以内。

为什么 Devvit 服务器无法承载此(“它不支持的用例”)

  1. 持久连接。 WebView 客户端只能调用自己的 /api/ 路由,而 Devvit 服务器是 request/response,没有 WebSocket 和无流媒体。战斗游戏需要每个玩家一个长期存活的双向连接。
  2. 消息速率。 每秒 60 个输入意味着 8 名玩家房间每秒 480 个请求,如果每个输入都变成 /api/ 调用。实时是服务器到客户端的,只有 100 个消息每秒每个安装,约 5 个同时房间每个子版块在 20 Hz 快照下。
  3. 延迟预算。 每 16.7 ms 增加一个回滚帧。通过无服务器 HTTP 加实时传递至少两个跳跃,没有发布的延迟或顺序保证。
  4. 权威和反欺骗。 结果必须由我们的服务器验证,持有模拟。客户端或 Redis 模型不能是权威的。
  5. 区域。 我们的匹配路由玩家到 8 个区域;Devvit 服务器无法选择每个玩家最接近的游戏服务器。

我们要求的内容

(a) 支持实时战斗游戏的路径:

  • 每秒 60 Hz 的输入
  • 我们自己运行的 WebSocket 服务器
  • 往返延迟小于 100 ms
    如果答案是“今天不可能”,清楚地知道也是有用的。

(b) 对 play.nanquim.gg 和 ws.nanquim.gg 的域名豁免请求。

理由:

  • 都是我们自己的游戏服务器(仅 HTTPS 和 WSS),由 ALAS TECHNOLOGY LLC (美国) 运营,联系方式 [email protected]。
  • play.nanquim.gg:匹配和房间分配(HTTPS)。
  • ws.nanquim.gg:比赛连接(WSS),Devvit 服务器不支持的部分。
  • 数据:唯一标识符将是 Reddit 用户 ID,匿名(哈希)前置。没有用户名或电子邮件,没有基于 IP 的资料库,没有广告,没有跟踪,没有 Reddit 之外的登录,没有从帖子链接。
  • 我们将接受任何约束以使此审查可行:固定主机名列表、速率限制、协议审查、您的侧杀开关。
    我们今天也提交了外部端点访问表格,以便我们的服务器可以将房间状态和验证的比赛结果推送到应用程序(远远低于 5 个请求每秒限制)。这涵盖了得分板,但不是实时比赛。

(c) 路线图问题: WebTransport、WebRTC(数据通道)或 Reddit 主机的持久连接的官方代理或代理在路线图上吗?我们了解到 u/RedditParadox 在 1v1nsx7 中指出目前没有 WebSocket 计划。如果考虑其他传输方式,我们很乐意测试它并与真实比赛的延迟数字共享。感谢阅读。