Ski*_*lGG 1 javascript xmlhttprequest websocket node.js
我正在尝试用 JS 制作简单的 Tic-Tac-Toe 游戏。
我几乎做了所有的事情。现在只有一件事要做。
我想让它可以与某人在线玩。
我想通过互联网在两个游戏之间发送数据。
不幸的是我的服务器不支持 Node.JS。
有没有一种方法可以在没有任何服务器端“套接字”的情况下实现这一点。
我想我可以用它来XMLHttpRequest()保存/加载数据到服务器文件中并像这样玩,但我认为这需要大量代码,也许对于 ttt 来说它会足够快,但对于更复杂的游戏它不会足够了。
我知道这很难,但是在 Node.js 之前他们是怎么做到的呢?
对于像 Tic-Tac-Toe 这样的玩家轮流玩的游戏,延迟绝对是通信中仅次于所有其他因素的第二位。仅出于这个原因,仅与 HTTP 协议进行通信(通常使用XMLHttpRequest类或Fetch API)是一种非常合理的方法,它将节省您大量的编程工作。
否则,当需要一个或多个低延迟和/或RTC通道(希望有一个充分的理由)时,WebRTC和WebSocket都是可行的候选者。
其一,WebRTC 绝对可以实现点对点,而 WebSocket 使用客户端-服务器模型。但即使是 WebRTC 也需要“信令”服务来最初交换对等标识符,然后最终切换到直接在对等点之间进行通信。虽然建立 WebRTC 通信需要对等标识符,但 API 故意不涵盖如何交换对等标识符 - 无论您想要设计信令服务,都取决于您。对于所有 WebRTC 关心的问题,您可以将对等 ID“发布”到 HTTP 服务器,并使用其他对等的 Web 浏览器检索它,反之亦然。WebRTC 从已知的对等 ID 开始。
否则,如果配置为这样做,WebRTC 能够利用STUN和/或TURN服务来维持对等连接,否则网络将禁止任何两个客户端之间的直接 IP 路由——这是真正对等的必要先决条件- 同伴交流。
并非所有情况都需要 STUN/TURN 服务,但了解平均网络状况,如果不使用 STUN 或 TURN 或两者,您的应用程序对于由多个任意网络分隔的任何两个客户端都不会非常可靠。就像双方被至少一个防火墙或充当一个角色的顽固路由器隔开的场景一样。
然后,TURN 服务将透明地路由 WebRTC 通信,充当中继。
STUN 服务在客户端之间的防火墙上打孔,以便随后可以进行点对点通信。这意味着与TURN服务相比,在后者建立后,它在通信中不发挥任何积极作用。
WebRTC 有点复杂,特别是如果您期望使用 和 的 API send,receive但开发人员应该可以理解简化的连接示例。
您可能也不需要直接使用 WebRTC API,有一些库将 WebRTC 封装成一种或另一种风格的更简单的 API,这些 API 同时隐藏了 WebRTC 的更多边缘或“样板”方面,这也有助于最大限度地降低获取 WebRTC 的风险。由于不同的用户代理因以不同的方式实现 WebRTC 的不同部分而臭名昭著,因此陷入了麻烦。
PeerJS就是其中之一,但毫无疑问还有其他库。
WebSocket API 与 WebRTC 不同,需要一个兼容 WebSocket 的服务器,并且 WebSocket API 不进行点对点操作。好消息是 1) 兼容 WebSocket 的服务通常只是一个高级中继(通常与应用程序后端逻辑融合),尽管它工作在应用程序级别而不是 TURN 的会话级别,2) 有很多“交钥匙”WebSocket 服务器实现。