网关服务器之结构调整


网关服务器之结构调整

在开发wap网关服务器过程中,结构由开始的固定僵化,到后来理解了IOCP的实质之后的统一,经历了一番变化,总结如下。

从逻辑上而言,wap网关服务器是分两部分的 。一部分和数量庞大的终端进行交互(前端),另一部分和IAG服务器交互,上传终端数据和接收指令(后台)。最初我是用IOCP来处理前端,后台只建立一条TCP连接,用标准三线程+重叠模型来上传和接收数据。这样的逻辑看上去很美,呵呵~~

但后来遇到一个问题,由于IAG服务器之前是与终端直连的,因此下发信息并不包含sim卡号。即wap网关服务器收到的信息无法确认是哪个终端的,采用一条tcp连接的方式走不通,这样只有为服务器内部为每个终端建立对应的与IAG服务器连接的socket(由于是在同一内网,用的是udp)。

由于我的思维定式,潜意识把与IAG交互的udp socket作为后台的一部分来处理,如何处理这批和前端终端数量相同的socket的io成为了一个问题。最初我幼稚的把每个udp socket做成了异步的socket,轮循的处理它们的io请求,后来意识到完成端口队列能够处理任何与之关联的socket io请求,不论这些socket是否连接的目标是否相同,是否是接收的还是发起的。于是我在后台也建立了一个iocp来处理这些udp socket的io请求。

之后我以为到头了,两个iocp分别处理前端和后台,tcp和udp两种类型的socket io,这是非常自然和明晰的结果。但在晚上总结心得的时候,突然意识到为什么要用两个iocp来分别处理这面向两个方面两种类型的socket呢?既然iocp能够无差别处理socket的io,它只是一个消息队列,接收所有关联的socket io消息。这样我只需使用一个iocp来处理所有的tcp和udp socket io,在投递io请求时做上各自的标记即可。

于是按上述想法进行改动,在形式上是所有的socket一并被处理,但逻辑上还是分开的。为此自己还得意了一把,后来看到一个前辈开发网关的文章,发现他也是这样处理,呵呵 ,自己只是后知后觉而已~~~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值