我正在使用socket.io在Android的视频聊天应用程序中进行显示。用户首次登录,成功后,我将客户端(应用程序)与LoginActivity中的套接字连接起来,然后完成()LoginActivity(这是我与套接字连接的唯一位置),然后将用户带到家庭活动。
套接字对象在应用程序范围内,因此只要他/她正在使用该应用程序,我就可以保持用户在线(连接操作发生在LoginActivity中,但我用来连接的套接字在ApplicationClass中),到目前为止,一切都很好。
问题:
如果由于某种原因应用程序在Android 8及更高版本中崩溃,则该应用程序将按照我的理解返回上一步(如果我错了,请告诉我),例如,如果我处于1-HomeActivity中,则转到2-SettingsActivity然后3-UpdateProfile,应用程序崩溃在UpdateProfile,应用程序将不会完全崩溃,但是它将转到2-SettingsActivity BUT(这是问题所在),整个应用程序中所有仍然存在的对象都将被重新创建。意味着我前面提到的套接字将被重新创建,而较旧的套接字将被杀死,客户端将脱机。
我得到的唯一解决方案是重新连接套接字,但我已经登录了(无法去到socket.connect()发生的地方,正如我提到的那样是LoginActivity),没有什么可说的我(回调或侦听器)应用程序崩溃了,因此我可以说:“啊,当崩溃时执行此代码并执行connect()动作”。
预先感谢
答案 0 :(得分:1)
在我的视频聊天应用程序中,我有一个每秒运行一次的“全局计时器”,并且在此计时器功能中:
我每10秒向服务器发送一次心跳。
在服务器端,我有一个数组来记录所有已连接的用户,如果在30秒内未收到任何心跳信号,我将从该数组中删除一个用户,并且还将此套接字id从服务器端断开。 / p>
使用心跳功能发送登录ID,以在刷新并重新建立连接时“刷新”用户的登录状态。
服务器在收到心跳后,将心跳返回给客户端。
在收到心跳返回后,客户端执行一些计划的作业(某些作业只能通过联机连接完成)
我确实知道socket.io有自己的心跳,但是socket.io心跳并不总是有效!尤其是当您使用socket.io发送大型视频文件时。