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