如何使用最小的开销实现简单的无服务器P2P浏览器到浏览器消息传递?

26

我正在尝试创建一些简单游戏的基本实现(以井字棋为起始项目),这些游戏可以在不需要中央服务器的情况下通过互联网进行玩耍。该页面甚至不需要托管,可以在本地机器上运行,也可以托管在Web服务器上。当托管游戏时,页面会向主机提供他的IP地址,然后可以通过任何方法(电话、即时消息等)将其发送给朋友。那个朋友将输入或复制/粘贴IP到加入对话框中,并能够玩这个游戏。我希望这两个人能够在不安装任何其他软件且不联系任何类型的中央服务器的情况下完成这项操作。

我已经研究了许多潜在的解决方案,包括node.js、webrtc、websocket、flash、java等。每一个都存在与之相关的问题,例如需要一个中央服务器,或需要客户端可能需要下载未安装在他们电脑上的东西,或只传输音频和视频而不能用于发送数据消息。告诉某人需要下载Java似乎很微不足道,或者要我使用Flash开发应用程序,但这与我的最终目标背道而驰。

如果完全在JavaScript中执行我想要做的事情不可能,那么就不可能了。但我不明白为什么不能这样做,因为浏览器本身能够将文本数据发送和接收到解析为IP或直接到IP的URL。其他解决方案也受欢迎,但如果无法实现此操作,那么应该。

我尝试做的确切要求的简单解释是:

  1. 应使用完全免费的技术(免费的意思是没有任何费用,如Flash,我意识到可以免费编写针对Flash播放器的Web应用程序,但在stratum中进行的点对点需要注册Beta密钥,即使我可以免费获得该密钥,也不会永远保持免费)。

  2. 没有外部服务器或虚假的对等。 (再次提及类似于Flash或基于Unity的解决方案,其中可以模拟点对点,只要您使用其中央服务器)

  3. 没有客户端下载(当然,大多数人都已经安装了Java或Flash,但许多人并没有,而且Java是一个相当庞大的下载,对于电脑小白用户来说也不友好。它甚至尝试安装工具栏。此外,我的许多用户甚至不愿意下载任何东西,包括Java或Unity,这些本身就与该项目有关的问题已经提到)

总之,如果Ajax可以向指定的IP发送请求并监听响应...为什么我不能在纯JS中获得简单的P2P消息传递?还是可以的吗?

我不应该需要托管完整的Web服务器或任何类型的单独应用程序或插件来发送和接收数据。

我是否漏掉了什么?


可能是重复的问题:如何在没有任何服务器的情况下创建P2P Web聊天? - Ciro Santilli OurBigBook.com
2
WebRTC的存在改变了这个问题的意义。 - Wolf
2个回答

19

在推荐了pubnub之后,我去那里看了一下,印象还不错。但是,最终我偶然发现了完全符合我要求的东西——RTCDataChannel,简直难以置信。 这个网站 终于证明了我想要的是可行的。虽然目前浏览器对此功能的支持还很少,但正在逐渐增长,整个经历加强了我对浏览器社区对点对点应用程序日益增长的支持的信心。


4
PubNub也提供WebRTC信令库。这可以帮助您避免构建自己的信令服务器。您可以在此处找到它:https://github.com/pubnub/webrtc(完全声明:我在PubNub工作并构建了他们的WebRTC库)。 - sharpper
错误:页面未找到 - Dan Froberg

0
总之,如果ajax可以向指定的IP发送请求并等待回应,为什么我不能在纯JS中获得简单的点对点消息传递呢?或者说我可以吗?
这是因为ajax请求必须由HTTP服务器处理,所以您仍然需要为每个客户端安装服务器。
假设你想要:
1.免费 2.没有外部服务器 3.没有客户端下载
我会说除非你放弃其中一个要求,否则不可能实现这些要求之一。
我的建议是PubNub。这个解决方案仍然需要一个服务器,而且它不是免费的(他们有一个免费使用层级)。但好的是你有一个模拟的P2P连接,无需进行服务器操作,并且无需客户端下载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接