如何在应用程序中同时处理多个用户请求

Posted

技术标签:

【中文标题】如何在应用程序中同时处理多个用户请求【英文标题】:how to handle multiple simultaneous user requests in an application 【发布时间】:2012-06-03 16:09:37 【问题描述】:

我正在用 Java 创建一个应用程序,其中数据库中有一个存储可用访问槽的表。

基本上当用户发出请求时,程序应该在表中找到一条有一个打开(未使用)槽的记录。用户的数据发送给他后,该槽被标记为已使用,不能再使用。

我很困惑的是,如何处理许多同时请求...例如,如果同时有 2 个请求,那么它们是否有可能从桌子?我如何确保即使有许多同时请求,每个请求都选择一个唯一的未使用槽,并且所有请求都选择不同的未使用槽。

还有一件事,我确实有很多插槽,但重要的是没有一个插槽被 2 个不同的请求占用。但是,即使这种情况在未来也可能会发生变化,如果请求数量急剧增加......所以我需要一个解决方案,以按照我所描述的方式处理大量请求。

【问题讨论】:

【参考方案1】:

您将槽位提取请求放入同步队列中。这样,您将保证插槽拾取是 FIFO(先进先出)。你可以使用this

【讨论】:

【参考方案2】:

您使用的是什么数据库? mysql 支持SELECT ... FOR UDPATE 行锁定。

【讨论】:

【参考方案3】:

你想要做的事情叫做Connection pooling(这里使用tomcat的例子)。上述问题的解决方案是使用数据库允许的信号系统,特别是事务。

首先,您读取表并找到未使用的第一条记录。您将该号码传播回您的应用程序。然后您尝试专门打开记录(用于写入)。您再次检查该记录是否仍然未使用,如果是,则获取该记录的数据。将数据保存到记录中并发布。但是,如果在打开记录时突然使用该记录进行写入,则需要回退并再次查找新记录并重复该机制。

【讨论】:

【参考方案4】:

试试这个,

使用ArrayBlockingQueue 进行线程安全访问......这将确保一次只有一个线程可以访问记录。

【讨论】:

以上是关于如何在应用程序中同时处理多个用户请求的主要内容,如果未能解决你的问题,请参考以下文章

Web 服务器如何在单个端口 (80) 上一次处理多个用户的传入请求?

多个服务器如何通过维护相同的用户会话来处理 Web 应用程序请求。?

如果多个用户同时在 Blazor 中发出请求会怎样?

TCP服务器如何使用select处理多客户连接

在 go 中一次处理多个 GET 请求

Flux:如何处理多个异步请求