如何在应用程序中同时处理多个用户请求
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) 上一次处理多个用户的传入请求?