支持浏览器客户端与本机客户端之间的交互

时间:2016-08-30 07:16:59

标签: sockets websocket cross-platform native

我的问题很难解释,但我很难找到一个好的整体解决方案。

我想支持我的浏览器多人游戏,但我也希望它可以在Windows和Android(目前)上播放。我遇到的实际问题是我需要一个基本的TCP或UDP连接来使用,以简化客户端的跨平台方面。我只知道WebSockets是在浏览器中创建实时客户端应用程序的可行/可行解决方案,但这也需要WebSocket服务器连接。

现在,因为浏览器客户端没有任何可行的WebSockets替代方案,这表明下一种方法是为本机客户端(windows和android)制作/使用Web套接字库。至少,这是我的第一个念头。我得出的结论是,这会给我带来太多的开销,以便在未来的技能水平和时间处理和继续支持。我还读过,其他语言(库等)的支持并不完全符合WS标准,这使我远离了这个想法。

我的最后一点想法让我得到了另外两个可能的解决方案,这些解决方案都有一些重大缺点。

潜在解决方案1 ​​ - 整体非常薄弱 我试图尝试的第一个解决方案似乎是目前最明显的选择,但有一个问题存在一些潜在的巨大缺陷。基本上,有两台服务器。一个适用于浏览器客户端,另一个适用于本机客户端。这个问题是我正在分离一个可能小也可能不小的玩家群。如果玩家基础已经很小,我就会失去能够互相玩游戏的人。第二个大问题是,现在如果有人想要从任一客户端登录他们的帐户,那么需要有一个通用数据库可供选择(两个服务器都可以访问) - 如果我想从一个客户端启用客户端服务器,因为有人登录到不同的客户端,它需要服务器间验证,什么不是。这开始听起来越来越多,越来越容易出现安全漏洞,我想的就越多。

潜在解决方案2 - 在很多方面强于1,但有2大缺点。
我提出的最后一种方法似乎是最理想主义的,但也有一些我过去读过的可怕的缺点。如果我有一个主服务器可以处理WebSocket和UDP连接之间的交互,那么这意味着我可以拥有一台服务器,不必去除我的数据库,并拥有来自浏览器和本机客户端的播放器。但最大的问题是,该服务器将通过两种不同的协议来监听 。我不完全确定这是多么可能,并且可能在Node.JS中可以实际组合,但我认为这是我最好的选择。我相信这种方法带来的最大问题是协议的混合。我过去曾经读过,将UDP与TCP混合会导致UDP更频繁地丢弃,TCP会慢慢降低。这最终可能是灾难性的灾难。

解决方案2和我正在制定的方法一样好吗?或者解决方案1实际上会更有利。在这一点上,解决方案1似乎是一场等待发生的灾难。我在解决方案2中提到的问题到目前为止仍然存在,是否有办法解决它的问题?由于缺乏更好的词,与TCP相结合的问题是否会与更强大的“服务器”相关联。

1 个答案:

答案 0 :(得分:1)

您的服务器应该支持两者。 WebSocket只是一种传输技术,您的服务器逻辑应该与传输无关。您的服务器应该在两个端口中侦听,一个用于原始TCP(或任何游戏使用),另一个用于WebSocket,应用程序的通信层应该为您的游戏逻辑抽象这一事实。

例如,您的常规Web服务器在两个不同的TCP端口中支持HTTP和HTTPS,但是当您编写Web应用程序时,大多数情况下,您并不关心每个客户端的连接方式,您只需编写应用程序逻辑,Web服务器将为您处理每个客户端传输。