我们的Web应用程序的结构是3层。 (表示层,业务层,DB层)
所有业务逻辑都在业务层中
表示层向业务层请求CRUD并获取结果以处理用户的请求
顺便说一下,我们在表示层配置了读取超时。 (3分))
在这种情况下,如果某些结果慢慢来自业务层,则用户会收到错误消息并正确完成CRUD处理。因此用户再次尝试操作。结果,数据被复制
如何解决这个问题呢?只是增加读取时间?
答案 0 :(得分:0)
实现回滚并在达到超时时执行此操作,或者如果在超时之前完成,则执行数据库事务。增加超时并没有解决任何问题。
答案 1 :(得分:0)
最好的选择实际上是让客户端收到请求的确认,然后(稍后)确认完成或失败。这包括典型情况,除了失去联系或工作非常慢。
增加超时是明智的,对于大多数严肃的工作来说,3秒的超时是不切实际的(如果服务器暂时忙或者你有网络延迟怎么办?)。
答案 2 :(得分:0)
对于业务层中长时间运行的事务,您应该在表示层上实现类似COMET的机制:
不幸的是,这种机制通常需要在Presentation和Business Layer中进行一些重要的实现更改。在客户端,javascript框架提供了开箱即用的这些功能。在服务器端,servlet 3.0中的Asynchronous Servlets可能有所帮助。
单独增加读取超时很简单,但在大多数情况下不会让你失控:如果客户端请求通过代理/防火墙等......,后者可能会在表示层之前超时并关闭连接。 / p>