首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为android应用程序创建服务器端,每隔几秒钟发出请求一次

为android应用程序创建服务器端,每隔几秒钟发出请求一次
EN

Stack Overflow用户
提问于 2014-11-18 09:05:20
回答 2查看 524关注 0票数 1

我正在创建一个android应用程序,其中一个用户将能够看到地图上的另一个用户。

事情是这样的

有一个web服务,客户端从web服务请求所有登录用户,然后将用户呈现为地图上的标记。每隔几秒钟,它就会再次发出请求。

我已经安排好了客户方面的工作。

问题在于服务器端。我的做法是:

  • web服务接收客户端请求,并将客户lat-lng保存在数据库中。
  • 从数据库中检索其他活动用户并将其发送回客户端。

它起作用了。但我知道这不是这样做的。

以下是问题所在:

  • 客户端每5秒调用一次web服务,因此web服务必须每秒钟更新一次DB中的客户端位置。
  • 如果有100个用户,那么web服务必须每5秒进行100次更新。(非常糟糕)

如何改进服务器逻辑?

EN

回答 2

Stack Overflow用户

发布于 2014-11-18 09:19:45

您必须创建一个新的线程,这样如果调用比预期的时间更长,调用就不会锁定设备。AsyncTask是一种使用多线程的简单方法,但它缺乏重复任务的功能。我想说的是,您最好要么使用Timer,要么使用较新的ScheduledExecutorService。如果您选择使用计时器,则可以创建一个TimerTask来传递它。ScheduledExecutorService则采用可运行的方法。

您可能希望将线程包装在服务中(服务不提供新线程),但这并不总是必要的,这取决于您的需要。

正如建议的那样,您还可以使用Handler.postDelayed()。尽管您仍然需要创建一个新线程,然后在它上调用Looper.prepare():

类LooperThread扩展线程{公共处理程序mHandler;

代码语言:javascript
复制
  public void run() {
      Looper.prepare();

      mHandler = new Handler() {
          public void handleMessage(Message msg) {
              // process incoming messages here
          }
      };

      Looper.loop();
  }

}( Looper中的代码)

另外,每5秒对webservice的调用似乎太频繁了,特别是当用户处于缓慢连接或需要传输数据的情况下,尽量减少调用。

票数 2
EN

Stack Overflow用户

发布于 2014-11-18 09:11:10

使用Google消息传递服务。每5秒请求一次是个坏主意,而且也会耗尽电池。只需要在服务器和客户端之间更新更改。因此,推送通知是正确的方式。

在你的例子-不是所有的100个用户的位置将改变每5秒。也规范变化

如果您使用轮询机制,服务器可以使用一个rest发送所有位置更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26990332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档