每分钟向服务器发送数据(用于检查状态用户)

send data to server every minute (For check status user)

对于检查状态用户,我应该使用 retrofit2 每 5 分钟向服务器发送一些数据。

当然,当用户在应用程序中时应该发送此信息

这意味着当用户离开应用程序时,无需向服务器发送内容

最好的方法是什么?

为了连接到服务器,我使用 retrofit2。

您可以在服务中编写此代码,并使用处理程序或 RxJava 每 5 分钟进行一次网络调用;

public class YourService extends Service{

 public final Handler handler = new Handler();




   @Override
    public void onCreate() {

    makeCallEvery5Min();
    }



private void makeCallEvery5Min(){
 runnable = new Runnable() {
            @Override
            public void run() {

            // execute call here 
            }

             handler.postDelayed(runnable, delay);

}


}


}

RXJava

  private void makeCallEvery5min() {
        Observable.interval(0, 5, TimeUnit.MINUTES)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(v -> your_network_call() );
    }

下面的方法可以帮到你

如果用户已登录,应该有用户 ID。

现在尝试在用户登录会话中检查特定用户的用户 ID。

注意:以下代码需要在网页中添加(jsp或servlet)--.

  1. Single User Approach:if(userId==Session.getUserId(userId)){response.refresh(5);//编写代码使用retrofit2向服务器发送数据。}
  2. MultiUser Approach: multiple users log in.if(Session.getUsers()!=null){response.refresh(5);//使用retrofit2编写代码将数据发送到服务器}

一种解决方案是使用 Android 的工作管理器通过 http 请求对您的服务器执行 ping 操作。您可以在用户登录时创建初始 OneTimeWorkRequest,并在每次执行时创建一个延迟 5 分钟的新 OneTimeWorkRequest。当用户退出应用程序时取消所有工作请求。

查看 Jetpack 库:https://developer.android.com/topic/libraries/architecture/workmanager

您需要更改体系结构的另一种解决方案是将套接字与 SocketIO 等库一起使用。当用户登录通知服务器用户在线时,从您的应用程序连接套接字。当套接字断开服务器可以将用户标记为离线时:https://socket.io/blog/native-socket-io-and-android/

另一种解决方案是将 Firebase 实时数据库用于状态系统。 Firebase 有一个很好的例子来说明如何做到这一点:https://firebase.googleblog.com/2013/06/how-to-build-presence-system.html