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

我刚刚完成了一个使用Web服务连接到远程数据库的Android应用程序。 我在本地主机上工作。

现在,我打算在服务器上托pipe我的Web服务。 比方说,我有我的Android应用程序安装在任何数量的不同的客户端智能手机。 每个智能手机用户同时拨打networking服务。

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

顺便说一句,我的Web服务都是基于SOAP的,我打算以后使用的服务器将是一个SQL Server。 我已经使用.NET框架来创buildWeb服务。

Solutions Collecting From Web of "服务器如何处理来自多个客户端的Web服务请求"

它的一般概念,而不是一个Android的具体

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

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

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

看看Web服务器如何工作

编辑:

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

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

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

注意:

multithreading最常见的问题之一是“竞争条件” –两个请求在做同样的事情(“竞赛”做同样的事情),如果它是一个单一的资源,其中之一是要赢得。 如果他们都插入一个logging到数据库中,他们不能都得到相同的ID – 他们中的一个将赢。 所以在编写代码的时候需要小心,以实现其他请求同时进行,并可能修改数据库,写入文件或更改全局variables。

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

如果您通过移动networking连接到服务,则初始连接的延迟时间较长,但不足以产生影响。

你的问题不是真的与Android相关,而是与networking后端的移动开发。

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

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

要考虑的一件事是避免从同一个客户端发送多个请求。 这是一个常见的实现问题:因为你没有数据已经​​返回,你认为没有待处理的请求,你发起一个新的请求。 这基本上可以创build不必要的负载在您的服务器

希望有所帮助!