我正在尝试在QT中编写一个简单的Web服务器来处理HTTP请求。 我知道QT有QThreads,我可以用它来处理同时连接。 我想要的是拥有至少2个工作进程,这样我就可以将大部分请求从主服务器传递给工作者。 问题是主设备正在侦听端口80,并且当有传入连接时它会“接受”。 我应该如何编写worker接受传入连接的代码? 工作进程无法侦听与主服务器绑定到端口80相同的端口。
我知道NGinx和LigHTTPD都有工作进程,只有主人才能侦听端口80。 请让我知道我该怎么做或NGINX或Lighttpd如何实现这一点。
答案 0 :(得分:1)
您有两种选择:
accept()
。您无法控制accept()
上被阻止的哪些工作人员会收到它。sendmsg()
的{{1}}将接受的连接调度到另一个套接字上的工作者。你可以拥有一堆SCM_RIGHTS
,一个在主人和每个工人之间,以实现这一目标。如果您正在使用工作线程而不是工作进程,那么您不必使用套接字技巧上的socketpair()
将已接受的连接发送给工作者,因为文件描述符在工作线程中已经有效(对于单个进程的单独线程,没有单独的文件描述符命名空间)。在这种情况下,您可以使用简单的信号,如信号量和队列,让工作人员知道它应该选择一个新的连接。
答案 1 :(得分:0)
我这样做的方式类似于Threaded Fortune Cookie example,除了我没有从QThread本身派生的FortuneThread类。我希望从QRunnable派生它们,然后将它们传递给QThreadPool。
这样,您可以限制系统中运行的活动线程数,并且您不必经常创建和销毁线程,只需重用它们直到线程池空闲一段时间。