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

网站内容页怎么设计应付网站软件服务怎么做分录

网站内容页怎么设计,应付网站软件服务怎么做分录,免费做电子书的网站有哪些,移动电子商务网站建设在 Muduo 的设计中#xff0c;Acceptor类扮演着接受客户端连接请求的关键角色#xff0c;其运行在每一个TcpServer实例中。一个服务器通常只创建一个监听socket描述字#xff0c;故其在TcpServer中只有一个#xff0c;用来监听服务器的唯一socket。它也会将传来的mainLoop和…在 Muduo 的设计中Acceptor类扮演着接受客户端连接请求的关键角色其运行在每一个TcpServer实例中。一个服务器通常只创建一个监听socket描述字故其在TcpServer中只有一个用来监听服务器的唯一socket。它也会将传来的mainLoop和acceptSocket封装成一个Channel这个Channel只对读事件感兴趣也就是说只通过回调函数 handleRead() 处理有新客户端连接请求的事件。 成员变量 EventLoop* loop_指向EventLoop的指针用于处理 I/O 事件。这个loop是mainloop负责监听服务器的socket并且接受客户端的连接请求。Channel acceptChannel_用于监听服务器 socket 的可读事件即新的连接请求。Channel 是 Muduo 中的一个重要类它封装了文件描述符file descriptor和与其相关的事件监听和处理逻辑。bool listenning_表示是否正在监听新的连接请求。Socket acceptSocket_Acceptor 会创建一个监听套接字并绑定到一个特定的 IP 地址和端口上。这个套接字被设置为非阻塞模式并使用 listen() 函数开始监听连接请求std::functionvoid(int) newConnectionCallback_当接受到新的连接时调用的回调函数。这允许用户自定义如何处理新的连接。 成员函数 构造函数接收TcpServer传来的mainLoop指针初始化成员变量设置监听地址和端口创建 socket并将 socket 绑定到指定的地址和端口。listen()Acceptor 会创建一个监听套接字并绑定到一个特定的 IP 地址和端口上。这个套接字被设置为非阻塞模式并使用 listen() 函数开始监听连接请求。调用Socket类中封装的操作系统的相关函数如 ::listen() 来监听 socket 的可读事件。handleRead()处理可读事件即新的连接请求的回调函数。当 EventLoop检测到 socket 上有可读事件时它会调用这个函数。在这个函数中Acceptor会接受新的连接并调用用户提供的回调函数 newConnectionCallback_。setNewConnectionCallback()设置处理新连接的回调函数。Acceptor 需要一个回调函数来处理新的连接请求。当有新的连接请求到达时Acceptor 会调用这个回调函数并传入一个已连接的套接字通常是 TCPSocket 的实例。其他辅助函数如关闭 socket、检查是否正在监听等。 作用 Acceptor类的主要作用是监听服务器 socket 上的连接请求并在接受到新的连接时调用TcpServer的 newConnection 回调函数。它是 Muduo 网络库中的一个重要组件负责处理与客户端建立连接的过程。通过 Acceptor服务器可以持续监听来自客户端的连接请求并在需要时接受新的连接。这使得服务器能够同时处理多个客户端的连接请求从而实现高并发的网络通信。 源码 Acceptor.h #pragma once#include noncopyable.h #include Socket.h #include Channel.h#include functionalclass EventLoop; class InetAddress;// Acceptor用的就是用户定义的那个baseloop也即mainLoop class Acceptor : noncopyable { public:using NewConnectionCallback std::functionvoid(int sockfd, const InetAddress );Acceptor(EventLoop *loop, const InetAddress listenAddr, bool reusePort);~Acceptor();// TcpServer的构造函数中设置的TcpServer::newConnection方法void setNewConnectionCallback(const NewConnectionCallback cb){newConnectionCallback_ std::move(cb);}void listen();bool listenning() const { return listenning_; }private:void handleRead();EventLoop *loop_; // Acceptor用的就是用户定义的那个baseloop也即mainLoopSocket acceptSocket_;Channel acceptChannel_;NewConnectionCallback newConnectionCallback_; // 在TcpServer::TcpServer()中设置将新连接打包bool listenning_; };Acceptor.cc #include Acceptor.h #include InetAddress.h #include LogStream.h#include sys/types.h #include sys/socket.h #include unistd.h// 创建一个非阻塞的sockfd static int createNonblocking() {int sockfd ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP); // SOCK_CLOEXEC标志子进程不接受父进程if (sockfd 0){LOG_FATAL sockets::createNonblockingOrDie error, errno: errno;}return sockfd; }Acceptor::Acceptor(EventLoop *loop, const InetAddress listenAddr, bool reusePort): loop_(loop), acceptSocket_(createNonblocking()) // 创建套接字socket, acceptChannel_(loop, acceptSocket_.fd()), listenning_(false) {acceptSocket_.setReuseAddr(true); // 设置tcp选项acceptSocket_.setReusePort(true);acceptSocket_.bindAddress(listenAddr); // bind// TcpServer::start()方法中调用Acceptor.listen()// baseLoop 》 acceptChannel(listendfd)// 有新用户连接要执行一个回调connfd-channel-subloopacceptChannel_.setReadCallback(std::bind(Acceptor::handleRead, this)); // acceptChannel_只关心读事件 }Acceptor::~Acceptor() {acceptChannel_.disableAll(); // 取消fd所有的事件状态acceptChannel_.remove(); }void Acceptor::listen() {LOG_DEBUG Acceptor::listen();listenning_ true;acceptSocket_.listen();acceptChannel_.enableReading(); // 将accpetorChannel注册在baseLoop的epoll }void Acceptor::handleRead() {InetAddress peerAddr;int connfd acceptSocket_.accept(peerAddr); // 获取到已连接addrLOG_DEBUG connfd connfd peerAddr: peerAddr.toIpPort();if (connfd 0){if (newConnectionCallback_){newConnectionCallback_(connfd, peerAddr);}else{ // 来了新连接但是没有对应的回调函数即无法为这个客户端服务则直接关闭::close(connfd);}}else{LOG_ERROR Acceptor::handleRead():acceptSocket_.accept error, errno: errno;if (errno EMFILE){LOG_ERROR Acceptor::handleRead() error, sockfd reached limit!;}} }
http://www.zqtcl.cn/news/13388/

相关文章:

  • asp程序设计做网站wordpress建立商业网站
  • 烟台建站软件网站开发内容怎么写
  • 衡水网站建设优化排名辽宁住房和城乡建设厅网站
  • 手机在网上怎么创建自己的网站厦门今天最新通知
  • 关于网站建设与维护论文有没有做相册的网站
  • 做网站公司多少钱我请网络公司做的网站上的图片被当广告拦截了_怎么回事
  • 济南浩辰网站建设公司怎么样建设网站客户资源从渠道来
  • 网站模板大小怎么在Front做网站
  • 资讯网站域名选购青岛营销型网站推广
  • 如何做招聘网站效果分析做网站fjfzwl
  • 阿里巴巴做网站的网站服务器维护方案
  • 网站开发 工作量深圳做棋牌网站建设找哪家效益快
  • 科技感十足的网站网站支持ipv6怎么做
  • 网站建设报告模板摄影网站的市场可行性
  • 网站风格什么意思阿里云网站模板 解析
  • 做企业国际网站多少钱html网站建设基本流程图
  • 外贸建站 知乎他达拉非和西地那非的区别
  • 公司企业建站报价wordpress数据文件
  • 网站建设数据的需求分析app游戏开发公司哪家好
  • 建设网站的必要与可行性html5教程pdf下载
  • 淮安做网站服务单位网站建设公司走进深圳一百讯
  • 建一个网站是不是要开公司免费 微网站
  • 金华高端网站设计平台免费推广
  • 郑州做网站建设公司哪家好批量 网站标题
  • 怎么做和美团一样的网站商业广告创意设计
  • 上林县建设局网站wordpress标签排序
  • 网站视频怎么做包小盒设计网站官网
  • 广州官网建站淘宝网页版登陆
  • 东莞网站建设模板报价动漫制作专业笔记本电脑推荐
  • 长春网站网络公司牛商网上市了吗