Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 即使应用程序未运行,也要保持socketio和nodejs连接处于打开状态_Android_Socket.io_Android Webview - Fatal编程技术网

Android 即使应用程序未运行,也要保持socketio和nodejs连接处于打开状态

Android 即使应用程序未运行,也要保持socketio和nodejs连接处于打开状态,android,socket.io,android-webview,Android,Socket.io,Android Webview,我有一个聊天系统,其中socketio客户端在成功连接后向节点服务器发送一个id。因此,当用户使用应用程序时,他们始终连接到节点服务器,但当应用程序关闭时,连接也会关闭。因此,我想要的是保持客户端连接到服务器,即使应用程序没有运行。我正在为应用程序使用Webview 问题:当应用程序未运行时,如何使用socketio连接到节点服务器并使用javascript发送一些数据 谢谢。在节点中构建一个端点以生成客户端ID,当客户端连接时,向它们发出您自己的ID,并将socketio ID与您自己的ID关

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

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


谢谢。

在节点中构建一个端点以生成客户端ID,当客户端连接时,向它们发出您自己的ID,并将socketio ID与您自己的ID关联。然后在实体中引用您自己的ID。在以后的任何情况下,将库的ID用作自己的ID都将是一件痛苦的事情,这样,当客户端重新连接时,它可以提供您自定义发布给它们的ID,并从中断的地方恢复。这使得重新连接正常,意味着您不必围绕这个问题进行设计

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

也就是说,我将构建两个节点服务器——一个套接字服务器,它只接受连接和转发数据,另一个服务器可以整天重新启动,并负责调用第一个服务器发送数据

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

另一个解决方案是使用这样的东西,它可以为您处理大多数这些问题


祝你好运。

谢谢你的回答,你在这方面是对的,但我很抱歉,因为我把问题搞砸了。我想知道的比我问的要简单得多。客户端发送到服务器的id对于该用户来说是固定的或静态的,因此这不是问题所在。问题是,当应用程序关闭或重新启动时,id会从服务器上删除,因此现在服务器对该客户端没有任何线索。所以我想知道的是,当应用程序未使用socketio运行时,如何在后台再次连接到服务器(并最终发送相同的id)。@atx,您希望android应用程序即使在后台也能保持连接吗?据我所知,你可能能够在这里和那里获得一些时间,在那里你可以重新连接并记录一些事件,但你将无法保持它的24/7活动。我会查看活动可用的生命周期挂钩,以及暂停和恢复活动的时间。当活动/应用程序暂停和恢复时,连接正常,当用户关闭应用程序时,问题就会出现。我认为使用后台运行的Android服务调用一个连接到服务器的js函数,
var socket=io('0.0.0.0:8000')
,就可以做到这一点(但不确定)。你觉得怎么样,Catalyst?环顾四周,我会这样做,但是使用一个服务>声明一个服务(服务子类)作为应用程序的组件之一。与活动不同,服务缺少可视的用户界面。它们用于实现长时间运行的后台操作或可由其他应用程序调用的丰富通信API。