Qt 工作进程应该如何侦听同一端口

Qt 工作进程应该如何侦听同一端口,qt,sockets,network-programming,Qt,Sockets,Network Programming,我正在尝试用QT编写一个简单的Web服务器,它将处理HTTP请求。 我知道QT有QThreads,我可以用它来处理并发连接。 我想要的是至少有2个工作进程,这样我就可以将大部分请求负载从主进程传递给工作进程。 问题是主机正在侦听端口80,当有传入连接时,它会执行“接受”。 我应该如何编写工作程序接受传入连接的代码? 工作进程不能在主进程绑定到端口80的同一端口上侦听 我知道NGinx和LigHTTPD有工作进程,只有主进程监听端口80。 请让我知道我应该如何做到这一点,或者NGINX或Light

我正在尝试用QT编写一个简单的Web服务器,它将处理HTTP请求。 我知道QT有QThreads,我可以用它来处理并发连接。 我想要的是至少有2个工作进程,这样我就可以将大部分请求负载从主进程传递给工作进程。 问题是主机正在侦听端口80,当有传入连接时,它会执行“接受”。 我应该如何编写工作程序接受传入连接的代码? 工作进程不能在主进程绑定到端口80的同一端口上侦听

我知道NGinx和LigHTTPD有工作进程,只有主进程监听端口80。 请让我知道我应该如何做到这一点,或者NGINX或Lighttpd如何实现这一点。

您有两个选择:

  • 主进程不接受套接字上的连接,但工作进程接受。当连接进入时,其中一个工作人员将随机对其进行
    accept()
    ed。您无法控制在
    accept()
    上被阻止的工作进程中的哪些将接收它
  • 只有主进程接受连接。然后,主进程通过另一个套接字使用
    sendmsg()
    SCM\u权限将已接受的连接分派给工人。您可以使用一组
    socketpair()
    s来完成此任务,其中一个位于主节点和每个辅助节点之间

如果您使用的是工作线程而不是工作进程,则不必使用套接字技巧上的
SCM\u RIGHTS
将接受的连接发送给工作线程,因为文件描述符在工作线程中已经有效(单个进程的单独线程没有单独的文件描述符命名空间)。在这种情况下,您可以只使用简单的信号,如信号量和队列,让工作线程知道它应该选择一个新连接。

我这样做的方式与类似,只是我没有从QThread本身派生FortuneThread类。我宁愿把它们从中派生出来,然后传给别人


这样,您就可以限制系统中运行的活动线程的数量,而不必不断地创建和销毁线程,只需重复使用它们,直到线程池空闲一段时间。

但是,如果主进程在同一端口上侦听,工作进程如何在同一端口上侦听?另外,如果工作进程不侦听,它如何接受()连接?先生,对于第一种和第二种方法,您能给我举个例子吗?我会选择最好的。