kNoReusePort,
kReusePort,
};
TcpServer(EventLoop* loop,
const InetAddress& listenAddr,
const std::string& nameArg,
Option option = kNoReusePort);
~TcpServer(); // force out-line dtor, for std::unique_ptr members.
const std::string& ipPort() const { return ipport_; }
const std::string& name() const { return name_; }
EventLoop* getLoop() const { return loop_; }
//设置底层subloop个数
void setThreadNum(int numThreads);
//开启服务器监听
void start();
void setThreadInitCallback(const ThreadInitCallback& cb)
{
threadInitCallback_ = cb;
}
void setConnectionCallback(const ConnectionCallback& cb)
{
connectionCallback_ = cb;
}
void setMessageCallback(const MessageCallback& cb)
{
messageCallback_ = cb;
}
void setWriteCompleteCallback(const WriteCompleteCallback& cb)
{
writeCompleteCallback_ = cb;
}
private:
/// Not thread safe, but in loop
void newConnection(int sockfd, const InetAddress& peerAddr);
/// Thread safe.
void removeConnection(const TcpConnectionptr& conn);
/// Not thread safe, but in loop
void removeConnectionInLoop(const TcpConnectionptr& conn);
using ConnectionMap = std::unordered_map<std::string, TcpConnectionptr>;
EventLoop* loop_; //baseloop
const std::string name_;
const std::string ipport_;
std::unique_ptr acceptor_;
std::shared_ptr threadpool_;
ConnectionCallback connectionCallback_;
MessageCallback messageCallback_;
WriteCompleteCallback writeCompleteCallback_;
ThreadInitCallback threadInitCallback_;
std::atomic_int started_;
int nextConnId_;
ConnectionMap connections_;
};
#include “TcpServer.hpp”
#include “Logger.hpp”
#include “TcpConnection.hpp”
#include
#include <string.h>
EventLoop* CheckLoopNotNull(EventLoop* loop) {
if (loop == nullptr) {
LOG_FATAL(“%s:%s:%d mainloop is null \n”, FILE, FUNCTION, LINE);
}
return loop;
}
TcpServer::TcpServer(EventLoop* loop,
const InetAddress& listenAddr,
const std::string& nameArg,
Option option = kNoReusePort)
:loop_(CheckLoopNotNull(loop)),
ipport_(listenAddr.toIpPort()),
name_(nameArg),
acceptor_(new Accept(loop, listenAddr, option == kReusePort)),
threadpool_(new EventLoopThreadPool(loop, name_)),
connectionCallback_(),
messageCallback_(),
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
0935836196)]
[外链图片转存中…(img-sqtck6fI-1710935836197)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-LrZBRP7U-1710935836197)]