2017-06-18 87 views
1

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

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

谢谢。

回答

0

在节点中构建端点以生成客户端ID,并且客户端连接时向您发送自己的ID,并将socketio ID与您自己的ID相关联。然后在实体中引用您自己的ID。在任何情况下,使用库的ID作为你自己的将会是一种痛苦,这样当客户端重新连接时,它可以提供你自定义发给他们的ID,并选择它离开的地方。这使得重新连接成功,意味着你不必为这个问题设计构造。

我说这一切,因为它将很难保持100%的正常运行时间,连接永远不会关闭。如此。如果android应用程序重新启动,那么如果您依赖由socketio提供的这些临时ID,则所有状态都将被重置。如果后端重新启动,任何代理故障等,然后你会回到原点。这就是说,我会建立两个节点服务器 - 一个套接字服务器,它除了接受连接和转发数据外什么都不做,还有一个服务器可以整天重新启动,它负责调用第一个服务器发送数据。

如果你想扩展这个,你可能会有很多很多的套接字服务器,让它们绑定到一个排队系统,比如rabbitmq,并且当它们获得事件时为它们有连接的客户端订阅事件他们可以将它们写入套接字。然后让您的其他控制服务将事件发布到排队系统,以便将事件发送到套接字。通过这种方式,您可以将业务逻辑的重新部署与维护与Android客户端的连接的服务器彻底解耦。

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

祝你好运。

+0

感谢您的回答,您在这方面是对的,但我很抱歉,我真的搞砸了这个问题。我想知道的比我问的要简单得多。客户端发送给服务器的id对于该用户是固定的或静态的,所以这不是问题。问题是,当应用程序关闭或重新启动时,从服务器上删除了该标识,因此服务器不知道该客户端。所以我想知道的是如何在应用程序未使用socketio运行时在后台再次连接到服务器(并最终发送相同的ID)。 – atx

+0

@atx,你想要android应用程序保持连接,即使它在后台?根据我的理解,你可能能够在这里或那里得到一些时间,在那里你可以重新连接并汲取一些事件,但是你将无法一天24小时保持活力。我会研究可用于活动的生命周期挂钩,当它暂停并恢复时。 – Catalyst

+0

当活动/应用程序暂停并恢复时,连接全部正常,当用户关闭应用程序时发生问题。我想调用一个连接到服务器的js函数'var socket = io('0.0.0.0:8000')',使用在后台运行的Android服务将执行这个技巧(但不确定)。你认为什么,催化剂? – atx

相关问题