避免使用消息队列收请求,TCP转发请求的编程模式

有一些应用,在最初设计的时候,采用的是一个进程阻塞在消息队列上,读消息,当读到消息后,再把请求发到TCP的链接上去。这个模型看似没什么问题,但是实际工作中有一个不是很好处理的问题:


当TCP链路中断后,阻塞在消息队列的进程无法处理这个关闭的请求。

 

在unix网络编程的第5章里面,作者举了一个阻塞在stdin上读数据,转发到TCP上的例子,这个例子在服务端关闭链接的情况下,客户端因为阻塞在读stdin上面,而得到一个CLOSE_WAIT的TCP状态。作者同时在后面的章节里面,提供了一个用多路复用来解决的办法。


可惜的是,消息队列并不支持多路复用,所以本文标题所说的这种模式,是存在很大的局限性的。如果前端必须用消息队列的话,解决的办法大致有下面两种:


1、使用多线程来管理那个TCP链接;
2、不用TCP,而用FIFO来转发请求。

 

在Unix环境高级编程这本书里面,对消息队列的这种局限性有足够的说明,在实际工作中如果能够避免使用消息队列的话,还是别用,一般来说进程间的“通讯”,FIFO足够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值