现在,我计划将我的Web服务托管在服务器上。假设我已经将Android应用程序安装在许多不同的客户智能手机上。每个智能手机用户同时调用Web服务。
那么服务器如何处理这些请求呢?它会为每个请求执行一个线程吗?我想详细了解服务器处理过程。考虑到所有手机都使用GPRS,这种情况下是否会有任何延迟?
顺便说一句,我的Web服务都是基于SOAP的,并且我打算稍后使用SQL Server作为服务器。我已经使用.NET框架创建了Web服务。
这是一个概念性的说明,与Android无关。
通常,每个用户都会发送一个页面的HTTP请求。服务器接收这些请求并将其委派给不同的工作进程或线程。
根据给定的URL,服务器会读取文件并将其发送回给用户。如果文件是PHP文件等动态文件,则在发送回用户之前执行该文件。
一旦请求的文件已经发送回来,服务器通常会在几秒钟后关闭连接。
请参阅Web服务器如何工作
编辑:
HTTP使用TCP,这是一种基于连接的协议。也就是说,在客户端与服务器通信时,客户端会建立一个TCP连接。
多个客户端可以同时连接到同一目标机器的相同目标端口上。服务器只需打开多个并发连接即可。
Apache(以及大多数其他HTTP服务器)都有一个多处理模块(MPM)。它负责分配Apache线程/进程来处理连接。这些进程或线程可以在自己的连接上并行运行,而不会互相阻塞。Apache的MPM还倾向于保持“备用”线程或进程,即使没有连接打开,这有助于加速后续请求。
注意:
多线程最常见的问题之一是“竞争条件”--当两个请求正在执行相同的操作(“竞赛”执行相同的操作)时,如果它是单一资源,则其中一个将获胜。如果他们都向数据库插入记录,则他们不能同时获得相同的ID--其中一个将获胜。因此,在编写代码时需要小心,以意识到其他请求正在同时进行,并可能修改您的数据库、写入文件或更改全局变量。
你的问题与Android无关,而是与基于Web后端的移动开发有关。
我不知道如何使用.NET进行服务器应用程序开发,但如果以Apache/PHP/MySQL为例,每个请求都在单独的线程中运行。
当请求到达服务器时可能会有小的延迟,但这不应影响服务器处理请求和数据所需的时间。
需要考虑的一件事是避免从同一客户端发送多个请求。这是一个常见的实现问题:由于没有返回的数据,您认为没有待处理的请求,因此启动了新的请求。这基本上会在服务器上创建不必要的负载。
希望这可以帮助!
a) 服务器上运行/监听一个Web服务实例(例如:Spring Boot微服务),端口号为80。
b) 这个Web服务(Spring Boot应用程序)需要像Tomcat这样的Servlet容器。该容器将配置线程池。
c) 当不同用户同时发出请求时,该容器将为每个传入请求分配来自池中的每个线程。
d) 由于服务器端Web服务代码将具有Bean(在Java中的情况下)大多数是单例的,因此与每个请求相关的每个线程都将调用单例API,如果需要访问数据库,则需要对这些线程进行同步,这是通过@transactional注释完成的。该注释同步数据库操作。