即使应用未运行,也要保持socketio和nodejs连接

时间:2017-06-18 09:50:25

标签: android socket.io android-webview

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

在节点中构建端点以生成客户端ID,并在客户端连接时向其发出自己的ID,并将socketio ID与您自己的ID相关联。然后在实体中引用您自己的ID。在任何情况下,使用库的ID作为您自己的ID将会很痛苦,这样当客户端重新连接时,它可以提供您自定义发给他们的ID,并从中断处继续。这使得重新连接正常并意味着您不必围绕这个问题进行架构。

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

话虽这么说,我会构建两个节点服务器 - 一个套接字服务器,它只接受连接和转发数据,第二个服务器可以整天重启,并负责调用第一个服务器发送数据

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

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

祝你好运。