菜鸟教程小白 发表于 2022-12-11 22:06:35

android - (Android、iOS、Windows、Linux)服务器轮询与推送与实现服务器


                                            <p><p>我正在构建一个多操作系统镜像系统,我想使用混合客户端-服务器和 p2p 通信方法来实现它(至少这是我描述它的最佳方式)。 </p>

<p>我的问题是,在某些时候,我有一个中央服务器(appengine,因此由于时间和网络能力的限制,我可以做的事情受到限制)需要向许多不同的设备发送消息,这些设备是不一定运行相同的操作系统(Windows、Android、iOS、Linux 等)。 </p>

<p>Android 和 iOS(或任何其他移动平台)是我在 2 个级别上遇到的主要问题。 </p>

<p>1 - 它们都受到电池电量的限制(笔记本电脑和台式机根本不应该有这个问题),所以无论我使用哪种方法都需要考虑到这一点。</p>

<p>2 - NAT(更难,因为用户对其防火墙的控制权比对他们正在运行的网络的控制权相对较少)。我的中央服务器将维护一个表,其中包含哪个设备具有哪个 IP 地址,但据我了解,如果有 NAT 或防火墙,如果端口未转发,它将无法访问它。</p>

<p>由于我将为每个操作系统编写一个特定的客户端,因此我更喜欢更通用的解决方案。我一直倾向于编写一个非常简单的 HTTP 服务器,它位于每个客户端上并接受请求(appengine 能够发送)并将它们视为提醒客户端执行操作(与服务器或另一个客户端)的消息。但是,我遇到了 NAT/防火墙的问题。例如,如果 appengine 需要向 AndroidDevice1 发送消息,它会从表中获取其 IP 地址并向其发出请求。但是,如果端口未正确转发,并且用户使用 3g/4g 防火墙由数据提供者控制,则此方法不起作用。</p>

<p>因此,我开始考虑使用 Android C2DM,但我想要一个可以跨平台实现的解决方案。</p>

<p>我能想到的唯一其他方法是让客户端轮询服务器以获取消息。不过,这有电池和网络消耗问题。 </p>

<p>是否有任何其他方法可以实现这一点,如果没有,上述哪种方法在平衡可用性、功耗和数据消耗以及用户输入方面最好(用户获得客户端所需的操作越少)设置(即端口转发等...)更好)?请注意,我不打算让这成为一场讨论/激烈的 war ,而是对事实的合乎逻辑的陈述。 </p>

<p>提前致谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以创建从设备到服务器的持久 TCP 连接,然后通过此打开的连接进行通信。在大多数情况下,这将是一个非常简单的与 keepalive 数据包的连接。</p>

<p>理论上,这会通过 radio 消耗一些电池,但实际上我体验到电池根本没有受到太大影响。关键是尽量减少通过这条线路的通信。</p>

<p>如果 AppEngine 不允许这种方法,您可以运行自己的套接字服务器,然后使用 REST 在此服务器和 appengine 服务器之间进行通信。我使用的套接字服务器是 Apache MINA,在可扩展性方面没有问题。</p>

<p>使用这种方法或任何其他方法您将遇到的另一个问题是,在 iOS (afaik) 上,当应用程序进入后台时,您无法保持 tcp 套接字打开。唯一与 iOS 设备通信的是 Apple Push Notification Service</p></p>
                                   
                                                <p style="font-size: 20px;">关于android - (Android、iOS、Windows、Linux)服务器轮询与推送与实现服务器,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9715002/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9715002/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: android - (Android、iOS、Windows、Linux)服务器轮询与推送与实现服务器