更新了一个比以前更正经更正式的版本,上个版本比较随意,随手创建一个线程池然后给一个fd分一个独占线程,比较随意。这次更新了epoll并采取了分文件编写模式,也不再是一个连接一个线程看着就粗制滥造。
目前的工作原理是,主线程epollwait,等到接受缓存区接受数据以后正常做监听套接字和连接句柄的判断,如果是来自某客户端的消息,将消息和来源fd打包给转发函数再丢进线程池任务队列做转发处理,所以目前就是主线程wait-(accept/recv),如果是recv再交给子线程转发。目前应该是可以支持1023台设备同时连接,下一步租个服务器跑sever端和朋友们一起happy。
另外,服务端也是在qt写的,cmak中加入了连接pthread库的代码,需要安装pthread。 另外记录几个经典错误,强转的优先级问题,途中想把ptr(void*,存的某结构体地址)做一个结构体指针强转,但是少个括号,被强转对象变成了ptr->cip。
在我直接调用enqueue,将某类成员函数作为形参传入的时候报错需要静态函数,不想乱静态用lambda做一个缓冲,拷贝类对象给子线程独占就ok。