服务器如何处理来自多个客户端的Web服务请求

时间:2011-11-26 13:58:26

标签: android web-services sql-server-2008 soap

我刚刚完成了一个使用Web服务连接到远程数据库的Android应用程序。我正在使用localhost。

现在,我计划在服务器上托管我的Web服务。假设我在任意数量的不同客户端智能手机上安装了我的Android应用程序。每个智能手机用户同时调用Web服务。

现在服务器如何处理这些请求?它是否每个请求执行一个线程?我想详细了解服务器处理。考虑到所有手机都使用GPRS,在这种情况下会有任何延迟吗?

BTW,我的Web服务都是基于SOAP的,我打算稍后使用的服务器将是一个SQL Server。我使用.NET框架来创建Web服务。

4 个答案:

答案 0 :(得分:6)

它用于一般概念,而不是Android特定的

通常,每个用户都会发送该页面的HTTP请求。服务器接收请求并将它们委托给不同的工作者(进程或线程)。

根据给定的URL,服务器会读取文件并将其发送回用户。如果文件是动态文件(如PHP文件),则在将文件发送回用户之前执行该文件。

一旦发回请求的文件,服务器通常会在几秒钟后关闭连接。

查看How Web Servers Work

修改

对于HTTP使用TCP,这是一种基于连接的协议。也就是说,客户端在与服务器通信时建立TCP连接。

允许多个客户端同时连接到同一目标计算机上的同一目标端口。服务器只会打开多个同时连接。

Apache(以及大多数其他HTTP服务器)具有多处理模块(MPM)。这负责分配Apache线程/进程来处理连接。然后,这些进程或线程可以在它们自己的连接上并行运行,而不会相互阻塞。即使没有连接打开,Apache的MPM也倾向于保持打开“备用”线程或进程,这有助于加快后续请求。

注意:

多线程最常见的问题之一是“竞争条件” - 你的两个请求正在做同样的事情(“竞争”做同样的事情),如果是一个资源,其中一个将获胜。如果他们都将记录插入到数据库中,则他们不能同时获得相同的ID - 其中一个将获胜。因此,在编写代码时需要小心,以便同时实现其他请求,并可能修改数据库,写入文件或更改全局变量。

答案 1 :(得分:3)

服务器将维护一个侦听传入请求的线程池。收到请求后,线程将处理请求并返回响应。如果同时收到所有请求,并且它们少于池中的最大线程数,则它们将全部并行服务(尽管实际处理将根据核心数/ cpus进行交叉)。如果请求多于线程,则请求将排队(等待连接),直到线程释放或客户端请求超时。

如果您从移动网络连接到服务,初始连接的延迟会更高,但不足以产生影响。

答案 2 :(得分:2)

您的问题与Android无关,而与网络后端的移动开发有关。

我不知道如何使用.NET进行服务器应用程序开发,但如果你以Apache / PHP / MySQL为例,每个请求都在一个独立的线程中运行。

请求到达服务器时可能存在小的延迟延迟,但这不会影响服务器处理请求和数据所花费的时间。

要考虑的一件事是避免从同一个客户端发送多个请求。这是一个常见的实现问题:由于您没有返回任何数据,因此您认为没有待处理请求并且您启动了新请求。这基本上可以在您的服务器上产生不必要的负载。

希望有所帮助!

答案 3 :(得分:0)

a)Web服务的一个实例(例如:spring boot micro服务)在服务器上的端口80上运行/监听。

b)此Web服务(Spring启动应用程序)需要一个像大多数tomcat一样的servlet容器。 该容器将配置线程池。

c)当同时有来自不同用户的请求时,此容器将 为每个传入请求分配池中的每个线程。

d)由于服务器端Web服务代码将主要具有bean(以防Java) 单例,与每个请求相关的每个线程将调用单例API 并且如果需要数据库访问,则将它们同步 需要通过@transactional批注完成的线程。这个 批注会同步数据库操作。