【问题标题】:Keep socketio and nodejs connection on even when the app is not running即使应用程序未运行,也保持 socketio 和 nodejs 连接
【发布时间】:2017-06-18 09:50:25
【问题描述】:

我有一个聊天系统,其中socketio客户端在成功连接后向节点服务器发送一个id。因此,当用户使用应用程序时,他们一直连接到节点服务器,但是当应用程序关闭时,连接也会关闭。所以我想要的是保持客户端连接到服务器,即使应用程序没有运行。我正在为应用程序使用 Webview。

问题:当应用程序未运行时,如何使用 socketio 连接到节点服务器并使用 javascript 发送一些数据?

谢谢。

【问题讨论】:

    标签: android socket.io android-webview


    【解决方案1】:

    在node中建立一个endpoint来生成client id,当client连接的时候给他们发出你自己的ID,并将socketio ID和你自己的ID关联起来。然后在实体中引用您自己的 ID。在任何情况下,使用图书馆的 ID 作为您自己的 ID 在以后都会很痛苦,这样当客户端重新连接时,它可以提供您自定义发给他们的 ID,并从中断的地方继续。这使得重新连接正常,意味着您不必围绕这个问题进行架构设计。

    我之所以这么说是因为很难保持 100% 的正常运行时间到连接永远不会关闭的程度。不切实际。如果 android 应用重新启动,那么如果您依赖 socketio 提供的这些临时 ID,所有状态都将被重置。如果后端重新启动,任何代理出现故障等。那么您将回到原点。

    话虽如此,我将构建两个节点服务器 - 一个套接字服务器,它只接受连接和转发数据,另一个服务器可以整天重启,它负责调用第一个服务器发送数据。

    如果你想扩展它,你可能有很多很多的套接字服务器,让它们绑定到诸如 rabbitmq 之类的队列系统,并为它们有连接的客户端订阅事件,当他们收到事件时可以将它们写入套接字。然后让您的其他控制服务将事件发布到排队系统以向套接字发布事件。通过这种方式,您可以将业务逻辑的重新部署与维护与您的 android 客户端连接的服务器完全分离。

    另一种解决方案可能是使用诸如https://www.pubnub.com/ 之类的东西,它将为您处理大部分这些问题。

    祝你好运。

    【讨论】:

    • 感谢您的回答,您在这方面是对的,但很抱歉,因为我真的把问题搞砸了。我想知道的比我问的要简单得多。客户端发送到服务器的 id 对该用户来说是固定的或静态的,所以这不是问题。问题是当应用程序关闭或重新启动时,id 会从服务器中删除,所以现在服务器不知道该客户端。所以我想知道的是,当应用程序没有使用 socketio 运行时,如何在后台再次连接到服务器(并最终发送相同的 id)。
    • @atx,你想让安卓应用即使在后台也能保持连接?据我了解,您可能可以在这里和那里获得一些时间,在那里您可以重新连接并扼杀一些事件,但您将无法让它 24/7 保持活力。我会查看活动可用的生命周期钩子,大约在它暂停和恢复时。
    • activity/app暂停和恢复时连接一切正常,当用户关闭app时出现问题。我认为使用在后台运行的 Android 服务调用连接到服务器的 js 函数var socket = io('0.0.0.0:8000') 可以解决问题(但不确定)。催化剂,你怎么看?
    • 阅读一下,我会这样做,但使用服务developer.android.com/guide/topics/manifest/…
    • > 将服务(服务子类)声明为应用程序的组件之一。与活动不同,服务缺乏可视化的用户界面。它们用于实现长时间运行的后台操作或可由其他应用程序调用的富通信 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多