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

2024-02-05

我正在尝试创建一些简单游戏的基本实现(井字游戏是起始项目),这些游戏可以通过互联网玩,而不需要中央服务器。该页面甚至不需要托管,可以在计算机上本地运行,也可以托管在 Web 服务器上。托管游戏时,页面会通知主机他的 IP 地址,然后可以通过任何方式(电话、即时消息等)将其发送给朋友。该朋友可以将 IP 输入或复制/粘贴到加入对话框中,然后就可以玩相关游戏。我希望这两方能够在不安装任何额外软件、也不联系任何类型的中央服务器的情况下做到这一点。

我研究了许多潜在的解决方案,涉及node.js、webrtc、websockets、flash、java等。其中每一个都有一个与之相关的问题,例如需要一个中央服务器,或者要求客户端可能必须下载一些东西他们的计算机上尚未安装该软件,或者仅传输音频和视频而对发送数据消息没有用处。告诉别人他们需要下载 java.. 或让我用 flash 开发应用程序似乎微不足道,但这与我的最终目标背道而驰。

如果我无法完全用 javascript 完成我想要做的事情,那么它就是不可能的。但我不明白为什么不能,因为浏览器能够自行向解析为 IP 或直接解析为 IP 的 URL 发送和接收文本数据。欢迎其他解决方案,但如果这是不可能做到的,那确实应该这样做。

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

  1. 应使用完全免费(如啤酒)的技术。 (没有Flash,我意识到Flash播放器的网络应用程序可以免费编码,但是层中的点对点需要注册测试版密钥,假设我可以免费获得,则不一定永远免费。)

  2. 没有外部服务器或虚假的点对点。 (同样,在基于闪存或统一的解决方案中,只要您使用他们的中央服务器,就可以实现点对点的模仿)

  3. 没有客户端下载(当然,大多数人都安装了 java 或 flash,但很多人没有安装,而 java 的下载量相当大,对于不懂计算机的用户来说并不友好。它现在甚至尝试安装工具栏。除此之外,许多我的用户根本不愿意下载任何东西,包括 java 或 unity。正如已经提到的,它们有与该项目相关的自己的问题)

总之,如果ajax可以向指定的IP发送请求并监听响应..为什么我不能在纯js中获得简单的点对点消息传递?或者我可以吗?

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

我错过了什么吗?


在 pubnub 被推荐后,我看了那里并留下了部分印象。然而,我最终令人难以置信地偶然发现了我正在寻找的东西。 RTCDataChannel 就是答案。这个网站 https://webrtc-experiment.appspot.com/docs/rtc-datachannel-for-beginners.html最终证明我想要的东西是可能的。浏览器对此功能的支持虽然很小,但正在不断增长,整个考验增强了我对浏览器社区对点对点应用程序日益增长的支持的信心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以最小的开销实现简单的无服务器 p2p 浏览器到浏览器消息传递? 的相关文章

  • 为什么 Internet Explorer 不喜欢这个 jQuery?

    在调试一些在 IE 中不起作用的 jQuery 时 我发现了以下错误消息 var item item itemArray itemIndex find a text trim Object doesn t support this prop
  • 生产中的 Webpack:为什么 React Native 会出现错误?

    我有一个测试应用程序 安装了以下内容 dependencies express 4 14 0 react 15 3 2 react dom 15 3 2 devDependencies babel 6 5 2 babel core 6 18
  • 为具有可变内容的内联块元素提供相同的高度?

    我有 4 个宽度固定但内容可变的内联块元素 并且我希望所有这些元素具有相同的高度 最大元素的高度 请参见这个jsfiddle http jsfiddle net kKZXj 我应该如何实现这个目标 如果仅使用 css 无法做到这一点 那么使
  • IE 9 的子元素不透明,我无法使用 captify 阻止它

    好的 我正在使用一段名为 Captify 的 javascript 它为您的图像添加了一个带有文本的小弹出窗口 适用于所有接受 IE9 的浏览器 IE9 会淡化弹出 div 中的所有内容 我已阅读其子元素问题 但无法修复它 由于在网上任何地
  • 通过单击字段启用非活动字段

    是否可以有一组非活动字段 如果单击其中一个字段 则某些字段将变为必填字段并运行某些代码段 举例来说 您显示了三个字段
  • GeoJSON 要素坐标未显示在 OpenLayers 地图上

    我正在尝试显示一个GeoJSON地图上的多边形 我使用了 OpenLayers 提供的示例以及以下数据 但仅显示第二个多边形 var geojsonObject type FeatureCollection crs type name fe
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • Android 简单 TextView 动画

    我有一个 TextView 我想倒计时 3 2 1 发生了事情 为了使其更有趣 我希望每个数字都以完全不透明开始 然后淡出至透明 有没有一种简单的方法可以做到这一点 尝试这样的事情 private void countDown final
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • 在 Chrome 中检索浏览器语言

    我一直在尝试让 momentjs 正确检测浏览器语言并本地化时间显示 按照使用 Moment js 进行区域设置检测 https stackoverflow com questions 25725882 locale detection w
  • 获取键盘事件中的鼠标位置

    我试图在用户按住 Shift 键时出现选择轮 滚轮应以鼠标位置为中心 然而当我测试这个时 pageX and clientX两者在事件对象上都未定义 是否可以通过键盘事件获取鼠标坐标 不 只需跟踪mousemove事件并持续保存当前位置 以
  • Firefox OS 后台服务

    我想构建一个应用程序 用户可以通过它输入一些设置 并且应用程序将启动后台服务来根据这些设置执行一些任务 我只想在模拟器中运行应用程序和后台服务 我知道它需要 认证 模式才能运行后台服务 但我现在不考虑在 Firefox Marketplac
  • 替换 Javascript 中的引号?

    对于我正在制作的网络应用程序 我将收到文本字符串 其中偶尔包含引号 因为我接下来要 document writing 字符串 所以需要将它们更改为撇号或转义 我该怎么做 因为当我尝试时它似乎不起作用 特别是我认为因为字符串的引号阻止了脚本的
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 可选链接在 create-react-app 中不起作用

    In a create react app项目 我正在使用 babel plugin proposal optional chaining在我的 babelrc中 但是 我有这个错误 Module parse failed Unexpect
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s

随机推荐