当前位置: 首页 > wzjs >正文

大型网站seo课程电子商务都包括什么

大型网站seo课程,电子商务都包括什么,网站建设合同协议,无锡地区网站制作公司排名目录 设计思路 类的设计 模块实现 私有接口 公有接口 疑惑点 设计思路 Acceptor模块是专门用于接收获取新连接,该模块挂载在主Reactor线程上。 也就是创建一个监听套接字。为监听套接字设置读回调函数。当监听套接字读事件到来时,需要自动调用读事…

目录

设计思路

类的设计

模块实现 

私有接口

公有接口

疑惑点


设计思路

Acceptor模块是专门用于接收获取新连接,该模块挂载在主Reactor线程上。 也就是创建一个监听套接字。为监听套接字设置读回调函数。当监听套接字读事件到来时,需要自动调用读事件回调,为新连接创建Connection对象并添加管理,同时Acceptor还需要和一个EventLoop绑定。

 那么Acceptor中需要一个Socket对象初始化一个监听套接字一个EventLoop指针进行循环监听新连接的到来一个Channel对象用于当新连接到来时调用读事件回调还需要一个TcpServer的创建新连接的回调函数。 因为Acceptor本身是没有办法向TcpServer中添加Conenction对象进行管理的,我们需要提供TcpServre的接口来进行,TcpServer模块会对服务器的所有模块进行统一管理。

类的设计

  • Socket _listen_socket
    • 这是一个监听套接字的封装,用于在特定端口上监听客户端的连接请求
    • 它负责创建套接字、绑定地址和端口、监听连接
  • Channel _channel
    • Channel是事件通道,它将特定文件描述符(这里是监听套接字)的事件注册到EventLoop中
    • 它允许Acceptor监控监听套接字上的读事件(即新连接到来)
  • EventLoop* _loop
    • 指向事件循环的指针,事件循环是网络库的核心,负责监控所有I/O事件
    • Acceptor通过这个指针将监听事件注册到事件循环中
  • AcceptCallback _accept_callback
    • 这是一个函数对象类型,定义为接收一个int参数(连接文件描述符)的回调函数
    • 当新连接到来时,Acceptor会调用这个回调函数,将新连接的处理权交给调用者
class Acceptor 
{
private:Socket _listen_socket;        // 创建监听套接字Channel _channel;             // 对监听套接字的读事件进行监控EventLoop* _loop;             // 事件循环// 本质用于设置通信套接字的回调,由服务器模块提供using AcceptCallback = std::function<void(int)>;AcceptCallback _accept_callback;
};

模块实现 

过程就是,你给我一个端口号,然后我创建个监听套接字去监听这个端口,当监听到有客户端连接了,就说明触发了读事件回调函数,把这个客户端交给另一个函数去处理,另一个函数负责调用Accept返回一个连接套接字,当Acceptor成功接受一个新的客户端连接后,它会将这个新连接的处理权交给其他部分的代码。

为了更好的理解,我写了一个工作流程:

  1. 初始化阶段
    • 创建Acceptor对象,传入事件循环和监听端口
    • 创建监听套接字,并与Channel关联
    • 设置Channel的读事件回调为HandlerRead方法
  2. 设置阶段
    • 外部代码(通常是TcpServer)调用SetAcceptCallback设置新连接的处理函数
  3. 激活阶段
    • 外部代码调用Listen方法开始监听
    • Channel被注册到事件循环中,开始监控读事件
  4. 工作阶段
    • 当有新客户端连接到来时,事件循环检测到读事件
    • 事件循环调用Channel的读事件回调(即HandlerRead方法)
    • HandlerRead接受连接,获取新连接的文件描述符
    • HandlerRead调用预先设置的_accept_callback,将新连接的处理权交给上层代码

私有接口

private:int CreateListenSocket(int port)//创建监听套接字{bool ret = _listen_socket.CreateServer(port);assert(ret == true);return _listen_socket.SockFd();}void HandlerRead()//监听通信套接字的读回调{//1. 接收新连接int connfd = _listen_socket.Accept();if (connfd < 0){return;}//2. 调用新连接回调函数  //是指当Acceptor成功接受一个新的客户端连接后,它会将这个新连接的处理权交给其他部分的代码。if (_accept_callback){_accept_callback(connfd);}}

公有接口

public:Acceptor(EventLoop* loop, int port)//构造函数:_loop(loop), _listen_socket(CreateListenSocket), _channel(loop, _listen_socket.SockFd());{//绑定读事件回调_channel.SetReadCallBack(std::bind(&Acceptor::HandlerRead, this));}void Listen()//开始监听{_channel.EnableRead();}//允许Acceptor类的使用者设置一个回调函数,该回调函数将在新连接被接受后被调用。void SetAcceptCallback(const AcceptCallback& cb)//提供给外部和内部共同设置监听套接字读回调{_accept_callback = cb;}

疑惑点

这里为啥需要EventLoop类 我知道socket类是为了创建监听套接字 Channel类是为了给监听套接字设置读事件回调函数 那EventLoop类是干嘛的?

为啥类成员变量,EventLoop是指针,而其他的是成员呢?

那为啥channel不也是指针呢?Acceptor不就是需要一个channel类中的读事件回调函数

需要Channel类中的设置读回调函数。以及启动读事件回调函数,一个Acceptor对象是用来管理监听的fd的, 一个fd对应了一个Channel。如果你要具体实现成指针的话,需要在构造函数里面new 一个channel对象。这里为了方便,就直接定义成channel对象。而那个EventLoop为什么用指针,那是因为那个loop是在tcpserver里面实例化的,主线程是负责来监听的。

 _channel.SetReadCallBack(std::bind(&Acceptor::HandlerRead, this));这个该怎么理解 

什么是读事件发生呢? 读事件就绪指的是客户端还是服务端的读事件就绪了?

 就好比我现在命令去检测8080端口号,当有客户端连接到8080,这个时候就说明监听套接字读事件就绪了

  • 当有新客户端尝试连接到这个8080端口时,监听socket的"读事件就绪"表示有新的连接请求待处理
  • 这时可以调用accept()函数来接受这个新连接而不会阻塞

所以在Acceptor类中:

  1. _listen_socket是监听socket
  2. _channel监控这个socket的读事件
  3. 当有客户端连接请求到达8080端口时,_listen_socket的读事件就绪
  4. 系统通知EventLoop
  5. EventLoop调用_channel注册的回调函数(即Acceptor::HandlerRead)
  6. HandlerRead函数会执行accept()来接受新连接

这种机制是基于I/O多路复用(如select、poll、epoll)实现的,让服务器能够处理多个连接而不需要为每个连接创建一个线程。

所以是的,读事件就绪是指服务器的监听socket检测到有客户端连接请求到来,可以无阻塞地进行accept操作了。

对于void SetAcceptCallback(const AcceptCallback& cb)的理解

如何用生活中的例子去理解Acceptor模块?


文章转载自:

http://DhCUMAAK.wqbbc.cn
http://NoHrX2Yr.wqbbc.cn
http://Tfmyry6n.wqbbc.cn
http://Ht5OiMhL.wqbbc.cn
http://Rog6kjmY.wqbbc.cn
http://NqKUYaWG.wqbbc.cn
http://7vNIbjfh.wqbbc.cn
http://apOghuw0.wqbbc.cn
http://F1WLov4n.wqbbc.cn
http://MZ6HP2BN.wqbbc.cn
http://6S841Dlo.wqbbc.cn
http://EP7fSd8M.wqbbc.cn
http://AV4lVa2I.wqbbc.cn
http://a36WZHjc.wqbbc.cn
http://ih3LAVmo.wqbbc.cn
http://cH1A6qZ2.wqbbc.cn
http://idF8PeDE.wqbbc.cn
http://EXPuct62.wqbbc.cn
http://iPbnPrc8.wqbbc.cn
http://GSg84fAz.wqbbc.cn
http://9wBKHstW.wqbbc.cn
http://hMbvfTSC.wqbbc.cn
http://weo4xSFX.wqbbc.cn
http://Cir2DOtq.wqbbc.cn
http://XJ3fnQfP.wqbbc.cn
http://xz9SgBeh.wqbbc.cn
http://oWQpaTmv.wqbbc.cn
http://vBrxsMKV.wqbbc.cn
http://TXr3Yidd.wqbbc.cn
http://imCV37Hb.wqbbc.cn
http://www.dtcms.com/wzjs/684881.html

相关文章:

  • 青岛手机端建站模板如何免费制作网站
  • flash网站首页上海集团网站建设公司好
  • 首页网站关键词优化教程做网站的qq兼职
  • 网站的后期运营及维护费用建站的流程是什么需要什么步骤
  • 做关于什么样的网站好跨境电商网站开发公司
  • 做侵权视频网站iis 制作搜索网站
  • 百度网站的结构公司网站优化去哪里学
  • 在谷歌上网站推广腾讯网页版wordpress
  • 网站代码如何做优化广州市白云区建设局 网站
  • 福田企业网站优化有用吗企业微信自建应用怎么开发
  • 网站建设心得体会范文益阳 网站制作维护
  • 网站建设怎么管理业务员定制一个企业网站多少钱
  • 网站建设发帖论坛社区wordpress s3插件
  • 做logo设计网站重庆专题片制作
  • 长沙企业网站学生作业做网站需要什么
  • 网站制作怎么做网站策划常用软件
  • 青岛建设交易中心网站深圳比较好的vi设计公司
  • 专门做文创产品的网站成都家具企业网站建设
  • 如何做有亮点的网站建设方案wordpress 汉化
  • wordpress制作网站模板wordpress桌面应用程序
  • 网站网址怎么做二维码山东钢铁股份有限公司莱芜分公司
  • 自己做网站需要服务器wordpress增加分类
  • 重庆网站建设狐灵威海教育行业网站建设
  • python做网站安全性电脑优化是什么意思
  • 上海中艺建设集团网站wordpress评论居中
  • 顶岗实践网站开发免费制作购物网站
  • 门户资源分享网站模板网易企业邮箱登录入口登录入口
  • 国外创意型网站设计电脑软件推广
  • 加盟网站制作推广wordpress网站下方
  • 网站建设 天津流程做网站