【问题标题】:How to choose which phone should be server and which one should be client?如何选择哪部手机是服务器,哪部是客户端?
【发布时间】:2021-01-10 02:13:05
【问题描述】:

我现在正在开发一个应用程序,其中(我将把它保留在事物的网络方面)两台设备在打开一部手机后会相互传输数据(很可能是一些 JSON 数据,也可能是图像)在另一个之上。我已经制定了设备检测逻辑,但现在我陷入了启动:两部手机如何知道哪一部首先是客户端,哪一部是服务器,然后切换?我正在使用 Apple 的 Network Framework

也许两台设备都选择一个随机数,0或1,然后与另一台设备通信结果,0是服务器,1是客户端?如果他们都得到相同的号码重新开始?我在网络方面没有太多经验,所以我真的不确定。

PS:我尝试使用 MultipeerConnectivity 框架,因为它提供了我正在寻找的点对点 functionality,但它没有得到 Apple 的积极支持(这意味着不利于未来的验证)并且不提供我正在寻找的可定制性,这就是我决定使用 Network Framework 的原因,它受到积极支持且易于交互。

【问题讨论】:

  • 你为什么说苹果不“积极支持”多点连接?它是操作系统的一部分。它没有被弃用。支持。
  • 没错,但它并没有使用最新的设计范例进行更新——我的意思是我已经有一段时间没有在 WWDC 上看到有关 MultipeerConnectivity 的任何内容了。并不是要让它听起来像我说它基本上已被弃用,我的错!但客观上,Apple 比 MutlipeerConnectivity 更支持 Network。我的猜测是他们为 AirDrop 创建了自己的自定义框架分支,向其中添加了新功能,但没有将这些添加到公共框架中。
  • 我认为你的意思是网络框架正在更积极地开发,而不是更多的支持。这可能是因为多点框架是在 iOS 7 中出现的,而网络框架是在 iOS 12 中首次出现的;您会期望对较新的框架进行更多增强,因为它们将功能添加到最初受限的框架中。您仍然应该为工作选择正确的框架。多点框架更加抽象,适用于不在同一 IP 网络上的设备。网络框架处于较低级别,需要设备在同一 IP 网络上。
  • 您可以使用网络框架,但您需要自己实现更多功能。为了回答您关于谁应该是客户端和谁应该是服务器的基本问题,我建议这两种设备始终都是。角色只需要在事务期间考虑;发送设备(客户端)将发现可用的接收设备(服务器)并在选择目的地时建立连接。然后,您在此会话中转移。
  • @PrayForTech 嗨,你找到答案了吗?我处于相同的情况,我想将 NetworkConnection 用于设备到设备的对等连接。我是网络新手,因此我们将不胜感激

标签: ios swift networking p2p network-framework


【解决方案1】:

MultipeerConectivity 和 Network 框架具有不同的功能,通过 Network,您可以使用 TCP/UDP(以及 TCP 之上的 Websocket)和 WiFi 创建客户端-服务器架构,而 MultipeerConectivity strong> 允许您通过 WiFi 和蓝牙连接多个设备。如您所见,它们并不相同。

对于网络框架,有Apple制作的自定义P2P连接指南

我不知道你的应用是做什么的,但通常其中一个设备应该是服务器/监听器,例如:

  • 在聊天应用程序中,它将是创建房间的应用程序
  • 在游戏中,它会是第一个进入游戏的人

【讨论】:

  • 感谢您的回答!我看了那个指南,也看了主题演讲,只是我的逻辑有点不同。在井字游戏中,总是有一个设备浏览和一个设备监听/托管(分别为 NWBrowser 和 NWListener)。有没有办法,在仍然使用网络框架的同时,同时做这两个,也许在不同的线程上?由于当用户按下“共享”时,设备不知道它应该预先成为客户端还是服务器。我知道这正是 MultipeerConnectivity 的用途,但该框架并不适合我所需要的一切
  • 如果您随时可能收到来自任何设备的连接,我会一直使用 NWListener 并在那里接收数据,并在我需要连接到新设备时创建新连接。这样,一个共享充当客户端并启动连接,但任何设备都能够接受连接并创建它们
猜你喜欢
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
相关资源
最近更新 更多