要想让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消息。

darwin之socket与Task关联



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请求被处理

darwin之socket与Task关联



darwin之socket与Task关联




相关文章:

  • 2021-09-19
  • 2021-07-23
  • 2021-06-13
  • 2021-06-10
  • 2021-07-13
  • 2021-05-21
猜你喜欢
  • 2021-10-03
  • 2021-07-17
  • 2021-07-18
  • 2022-02-21
  • 2022-12-23
  • 2022-01-02
  • 2021-08-17
相关资源
相似解决方案