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

网站动画特效青岛关键词推广seo

网站动画特效,青岛关键词推广seo,网站策划模版,优秀个人主页欣赏引言 在网络编程中#xff0c;服务器端程序需要能够监听客户端的连接请求并进行处理。Acceptor类在这个过程中扮演着至关重要的角色#xff0c;它负责创建监听套接字、绑定地址、开始监听以及处理新的连接请求。在本文中#xff0c;我们将详细剖析手写 muduo 网络库中的Acc… 引言 在网络编程中服务器端程序需要能够监听客户端的连接请求并进行处理。Acceptor类在这个过程中扮演着至关重要的角色它负责创建监听套接字、绑定地址、开始监听以及处理新的连接请求。在本文中我们将详细剖析手写 muduo 网络库中的Acceptor类探讨其实现原理和工作流程。 整体功能概述 Acceptor类的主要功能是在指定的地址和端口上监听客户端的连接请求并在有新的连接到来时调用相应的回调函数进行处理。它封装了套接字的创建、绑定、监听以及接受连接等操作使得上层代码可以更方便地处理网络连接。 代码结构分析 头文件Acceptor.h #pragma once#include NonCopyable.h #include Socket.h #include Channel.h#include functionalclass EventLoop; class InetAddress;class Acceptor : NonCopyable { public:using NewConnectionCallback std::functionvoid(int sockfd, const InetAddress );Acceptor(EventLoop *loop, const InetAddress listenAddr, bool reuseport);~Acceptor();void setNewConnectionCallback(const NewConnectionCallback cb) { NewConnectionCallback_ cb; }bool listenning() const { return listenning_; }void listen();private:void handleRead();EventLoop *loop_;Socket acceptSocket_;Channel acceptChannel_;NewConnectionCallback NewConnectionCallback_;bool listenning_; };代码解释 类型定义 NewConnectionCallback这是一个函数对象类型用于处理新的连接。当有新的客户端连接到来时会调用这个回调函数并传递新连接的套接字描述符和客户端地址。 构造函数 Acceptor(EventLoop *loop, const InetAddress listenAddr, bool reuseport)接受一个EventLoop指针、一个InetAddress对象和一个布尔值reuseport作为参数。EventLoop用于事件循环InetAddress表示监听的地址和端口reuseport用于设置是否重用端口。 析构函数 ~Acceptor()负责清理资源如禁用Channel的所有事件并移除Channel。 成员函数 setNewConnectionCallback用于设置新连接的回调函数。listenning返回当前是否正在监听。listen开始监听客户端的连接请求。 私有成员函数 handleRead处理读事件当有新的连接到来时会触发该函数。 私有成员变量 loop_指向EventLoop的指针。acceptSocket_用于监听的套接字对象。acceptChannel_用于处理套接字事件的Channel对象。NewConnectionCallback_新连接的回调函数。listenning_表示当前是否正在监听的布尔值。 源文件Acceptor.cpp #include Acceptor.h #include LogStream.h #include InetAddress.h#include sys/types.h #include sys/socket.h #include errno.h #include unistd.hstatic int createNonblocking() {int sockfd ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP);if (sockfd 0){LOG_ERROR listen socket create err: errno;exit(-1);}return sockfd; }Acceptor::Acceptor(EventLoop *loop, const InetAddress listenAddr, bool reuseport): loop_(loop), acceptSocket_(createNonblocking()), acceptChannel_(loop, acceptSocket_.fd()), listenning_(false) {acceptSocket_.setReuseAddr(true);acceptSocket_.setReusePort(true);acceptSocket_.bindAddress(listenAddr);acceptChannel_.setReadCallback(std::bind(Acceptor::handleRead, this)); }Acceptor::~Acceptor() {acceptChannel_.disableAll();acceptChannel_.remove(); }void Acceptor::listen() {listenning_ true;acceptSocket_.listen();acceptChannel_.enableReading(); }void Acceptor::handleRead() {InetAddress peerAddr;int connfd acceptSocket_.accept(peerAddr);if (connfd 0){if (NewConnectionCallback_){NewConnectionCallback_(connfd, peerAddr);}else{::close(connfd);}}else{LOG_ERROR accept err: errno;if (errno EMFILE){LOG_ERROR sockfd reached limit ;}} }代码解释 辅助函数createNonblocking 该函数用于创建一个非阻塞的套接字。使用::socket函数创建一个AF_INET类型的流式套接字并设置为非阻塞和CLOEXEC模式。如果创建失败会输出错误日志并退出程序。 构造函数Acceptor::Acceptor 调用createNonblocking函数创建一个非阻塞的套接字。设置套接字的地址重用和端口重用选项。将套接字绑定到指定的地址和端口。为acceptChannel_设置读事件的回调函数当有新的连接到来时会调用handleRead函数。 析构函数Acceptor::~Acceptor 禁用acceptChannel_的所有事件并从EventLoop中移除acceptChannel_。 成员函数Acceptor::listen 将listenning_标志设置为true表示开始监听。调用acceptSocket_.listen()开始监听客户端的连接请求。启用acceptChannel_的读事件以便在有新的连接到来时触发handleRead函数。 成员函数Acceptor::handleRead 调用acceptSocket_.accept函数接受新的连接并获取客户端的地址。如果接受连接成功且设置了新连接的回调函数则调用该回调函数处理新连接否则关闭新连接的套接字。如果接受连接失败输出错误日志并在errno为EMFILE时提示套接字描述符达到上限。 工作流程总结 创建Acceptor对象在服务器启动时创建一个Acceptor对象并传入EventLoop指针、监听地址和端口信息。设置回调函数调用setNewConnectionCallback函数设置新连接的回调函数。开始监听调用listen函数开始监听客户端的连接请求。处理新连接当有新的连接到来时acceptChannel_会触发读事件调用handleRead函数。在handleRead函数中接受新的连接并调用预先设置的回调函数处理新连接。 总结 Acceptor类通过封装套接字的创建、绑定、监听和接受连接等操作为上层代码提供了一个简单易用的接口来处理客户端的连接请求。通过使用EventLoop和Channel可以实现高效的事件驱动的网络编程。在实际应用中我们可以根据需要修改NewConnectionCallback函数以实现不同的业务逻辑。 希望本文对你理解Acceptor类的实现原理和工作流程有所帮助。在后续的文章中我们将继续深入探讨手写 muduo 网络库的其他部分。
http://www.tj-hxxt.cn/news/231031.html

相关文章:

  • 绥中做网站免费网站cms
  • 广州公司建站wordpress4.8是什么
  • 自己的网站发文章怎么做外链网站空间怎么建站
  • 网站优化月总结wordpress如何按分类分栏
  • 自己做一网站_多做宣传.wordpress调试模式
  • 报电子商务(网站建设与运营)北京商场人气排名
  • 网站联系方式设置要求网站要学什么
  • 贵南县公司网站建设可以做企业网站
  • 学生做的网站软件分销系统开发
  • 公司为什么做网站好的高端网站
  • 南沙开发区建设和交通局网站佛山市网站公司
  • 网站开发的基本流程文库公众号制作编辑器
  • 贸易网站设计公司商城网站建设哪家便宜
  • 网站建设与管理教案品牌运营和品牌推广
  • 广州做英文网站的公司运输房产网站建设
  • 易橙云做的网站怎么样wordpress 展示模板
  • 用wordpress仿一个网站模板下载上海易雅达网站建设公司
  • 自定义wordpress 登录潍坊seo
  • 100m的网站 数据库网站如何加入百度网盟
  • 移动互联和网站开发160 作者 网站建设
  • 双体系建设网站手机论坛
  • 网站jquery上传源代码苏州建设工程信息网
  • 网站建设电脑维修数据恢复酒店网站建设因素
  • powershell做网站建设银行的网站用户名是什么
  • 网站建设方案交换认苏州久远网络湖州做网站优化
  • 福州微信网站制作设计公司网站页面设计
  • 大兴网站制作找客户的软件有哪些
  • 宁波网站建设制作电话号码网络广告案例以及分析
  • 汕尾网站建设青岛网站建设搭建
  • 论坛推广网站网络推广宣传方式