首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web服务设计

Web服务设计
EN

Stack Overflow用户
提问于 2010-08-06 05:22:10
回答 2查看 76关注 0票数 0

公司A提供了基于异步池的webservice来进行通知。公司B检查通知。每次读取新通知时,A都会将它们从系统中删除。因此,后续的读请求仅返回新的通知。如果在30秒内没有响应,还要求客户端B中断连接。

这导致了一个潜在的问题:由于意外的缓慢,当B已经中断连接时,A有可能获得请求、删除通知并发送回响应。在这种情况下,通知会丢失。现在可以说核心问题在于操作领域( HTTP响应必须在20秒内交付),但在实践中,它并不总是可行的。

如何设计B(客户端)来避免这个问题?

我可以看到的一种方法是不删除A的通知,并使B知道其状态,以便它知道它需要从哪个ID开始处理通知,但这假设该ID将是连续的。它是由A控制的,即使B定义了它自己的序列,A仍然需要修改才能将它返回。

还有其他方法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-06 05:41:42

Web服务通常是不可靠的,因此将"read“请求作为"delete”请求提供双重服务很少是一个好主意,尤其是在客户端不知情的情况下。连接中断或超时的风险太大了。没有办法只通过修改客户端来解决这个问题,因为这里的错误是服务器-它的设计方式从根本上不适合web服务。

我认为使用递增ID的想法是正确的。客户机知道(或者可以修改为知道)它收到了哪些通知,所以如果它可以提供在轮询通知时收到的最后一条消息的ID,服务器应该能够根据该ID进行响应。

票数 0
EN

Stack Overflow用户

发布于 2010-08-06 05:47:22

看起来A公司的like服务应该是同步的而不是异步的。如果无法做到这一点,最好向新的公司A was服务发送“确认”-like响应,表明已收到(公司B)特定的通知并可以删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3419258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档