ios - 如何选择哪一部手机是服务器,哪一部是客户端?
问题描述
我现在正在开发一个应用程序,其中(我将把它放在事物的网络方面)在将一部手机放在顶部之后,两个设备将相互传输数据(很可能是一些 JSON 数据,也可能是图像)其他。我已经制定了设备检测逻辑,但现在我陷入了启动:两部手机如何知道哪一部首先是客户端,哪一部是服务器,然后切换?我正在使用 Apple 的网络框架。
也许两个设备都选择一个随机数,0或1,然后将结果与另一台设备通信,其中有0的设备是服务器,有1的设备是客户端?如果他们都得到相同的号码重新开始?我在网络方面没有太多经验,所以我真的不确定。
PS:我尝试使用MultipeerConnectivity框架,因为它提供了我正在寻找的点对点功能,但它没有得到 Apple 的积极支持(这意味着不利于未来的验证)并且不提供可定制性我正在寻找,这就是为什么我决定使用网络框架向下一层,它受到积极支持且易于交互。
解决方案
MultipeerConectivity 和 Network 框架具有不同的功能,通过Network ,您可以使用 TCP/UDP(以及 TCP 之上的 Websocket)和 WiFi 创建客户端-服务器架构,而MultipeerConectivity允许您通过 WiFi 和蓝牙连接多个设备。如您所见,它们并不相同。
对于 Network Framework,有Apple制作的自定义 P2P 连接指南
我不知道您的应用程序是做什么的,但通常其中一个设备应该是服务器/侦听器,例如:
- 在聊天应用程序中,它将是创建房间的应用程序
- 在游戏中,它将是第一个进入游戏的人
推荐阅读
- android - ViewModel 的寿命比它的工厂长
- c++ - 尽管没有有效的键,std::map 的 find() 函数仍返回一个值
- angular - HighCharts 无法识别 Legend 的功能
- angular - 循环变量未在函数内部以角度更新
- javascript - 如何在 JavaScript 的 reduce 中对数组求和?
- reactjs - 使用 combineReducers 时调度动作不会触发渲染
- c++ - 为什么这个 C++ 程序适用于输入的第一行而不是第二行或第三行?
- bigtable - 实时传感器数据的 Bigtable 行键设计?
- r - case_when - 来自数据帧的字符数据的奇怪行为
- vue.js - 如何在 eslint-plugin-vue 中禁用 eslint?