darwin之socket与Task关联

要想让task与socket关联起来,从而让socket以task的方式工作。

class HTTPSession : public HTTPSessionInterface;
class RTSPSession : public RTSPSessionInterface;
无论是HTTPSessionInterface还是RTSPSessionInterface,都派生于task,而内部均有TCPSocket fSocket成员,将fSocket与之际的socket关联即可。
因为TCPSocket内的ProcessEvent都是基类EventContext的方法,所以当收到客户端请求后,都是调用其关联的task的sinal方法,

因此HTTPSession和RTSPSession在其Run函数中就能够获取到socket消息。




class RTSPListenerSocket : public TCPListenerSocket
class HTTPListenerSocket : public TCPListenerSocket
class TCPListenerSocket : public TCPSocket, public IdleTask。
RTSPListenerSocket和HTTPListenerSocket均是派生于TCPListenerSocket。而它又是如何让task与socket关联起来的呢?
同时继承了TCPSocket和IdleTask,并且将TCPSocket内部的task直接设置成NULL。因TCPListenerSocket改写了虚函数:ProcessEvent,
因此当有客户端连接上时,直接触发Run函数,其内调用TCPListenerSocket::ProcessEvent,其内部调用GetSessionTask产生新的TCPSocket并将其内部的task与

accpet后的socket关联上。最后在调用theSocket->RequestEvent(EV_RE),等待该socket事件发生。


总结:
socket事件分成两类,分别是建立RTSP连接请求的到达和RTSP请求的到达。
对于RTSP连接请求的事件,EventThread建立一个RTSPSession,并启动针对相应的socket的侦听。
对于RTSP请求的事件,EventThread把对应的RTSPSession类型的Task加入到TaskThread的队列中,等待RTSP请求被处理








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值