有没有办法在 iOS 和 Android 设备中设置 Web 套接字服务器(不是客户端)?

Posted

技术标签:

【中文标题】有没有办法在 iOS 和 Android 设备中设置 Web 套接字服务器(不是客户端)?【英文标题】:Is there a way to set a web socket server (not client) within iOS and Android devices? 【发布时间】:2020-10-26 14:34:32 【问题描述】:

我正在研究是否可以在移动设备上设置“网络套接字服务器”(不同于“后端网络套接字服务器”的常用方法)。

为了做到这一点,我正在寻找一种让 iosandroid 设备接受 WebSocket 请求的方法。

旁注,我不太确定移动操作系统的安全设计是否允许这样做。

有什么方法可以在移动设备上设置 web socket 服务器吗? (如果是,更进一步,有什么方法可以与 react-native 一起使用吗?)

【问题讨论】:

different than the common approach 那应该有什么不同呢? 发起者将是一台云端机器,iOS或Android设备将响应来自云端机器的请求。 (请注意,我故意说“云机器”而不是“云服务器”,因为服务器角色是在 iOS 或 Android 设备上。)类似于推送机制。但是使用网络套接字完成。 您是否正在寻找像this lib 这样的库?为什么你需要在 iOS/Android 上使用 WebSocket 服务器对我来说有点奇怪!?但是,如果给定的库是您的解决方案,请告诉我发布它。对于 Android,您应该使用原生 Android 助手,然后从 NativeModule 包装并调用它,并在您的 ReactNative 项目中使用它。 实际上,我一直在寻找适用于 iOS 和 Android 的 react-native 实现。但仍然感谢 lib。 【参考方案1】:

有点。要回答您的实际问题:不。您不能在 react* 中创建(多平台)网络服务器。要回答我认为您可能有的问题:是的。你可以在 React 中进行直接的客户端到客户端的通信。

如果你想在 React 中创建一个网络服务器,我可以想象两个用例(我可能完全错过了你的意思,如果是这样,我很抱歉)。

用例 1 - 与服务器通信

这个是微不足道的。一旦一切都被初始化,Websocket 客户端和服务器就是同一个东西。除了 keepalive 消息和优先级的一些例外情况外,您可以创建一个 websocket 连接一个反应应用程序,它实际上与一个到服务器的 websocket 连接相同。

用例 2 - 客户端到客户端的通信

如果您尝试让客户端设备相互通信,并且不想通过自己的服务器传递消息,那么您需要 WebRTC。它名为“Web 实时通信”,完全符合您的预期。

The mdn docs are a great place to get started。 WebRTC 允许网络上任意客户端之间的数据流,无需服务器。看起来该协议旨在用于在对等点之间流式传输视频,但它可以用于任何事情。

*

您可以在 react 中创建 webservers 和 web-server 类似的行为,但它是在特定于平台的方法中完成的。但是,this 和 this 等项目具有允许您创建各种其他点对点通信流的框架。

【讨论】:

以上是关于有没有办法在 iOS 和 Android 设备中设置 Web 套接字服务器(不是客户端)?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Android 中设置对加密数据的随机访问?

如何在 Android 和 IOS 中获取设备 ID

有没有办法像 navigator.getUserMedia() 一样在 Chrome 中设置默认捕获设备? (谷歌浏览器)

不同设备尺寸的 iOS 自动布局约束值

Android的多重连接

检测 Android/iOS 设备是不是已经通过 Unity3D 播放音乐