gpt4 book ai didi

c++ - 多线程服务器问题

转载 作者:IT王子 更新时间:2023-10-29 01:19:35 25 4
gpt4 key购买 nike

我正在 linux 中编写一个服务于 API 的服务器。

最初,我想让它在单个端口上实现多线程,这意味着我将有多个线程处理在单个端口上收到的各种请求。

我的一个 friend 告诉我,这不是它应该的工作方式。他告诉我,当收到请求时,我首先必须遵循 Handshake 过程,创建一个线程来监听其他专用于该请求的端口,然后将请求的客户端重定向到新端口.

理论上,这很有趣,但我找不到任何关于如何实现握手和重定向的信息。有人可以帮忙吗?


如果我在解释您的响应时没有错,一旦我创建了一个多线程服务器,其中一个主线程监听一个端口,并创建一个新线程来处理请求,我实际上是在一个端口上使其成为多线程?

考虑我每秒收到大量请求的场景。端口上的每个请求现在都应该等待“当前”请求完成,这不是真的吗?如果不是,通信仍将如何完成:假设浏览器发送请求,那么处理此请求的线程必须首先监听端口、阻塞它、处理它、响应然后解除阻塞。

因此,尽管我有“多线程”,但由于端口被阻塞,我每次只使用一个线程而不是主线程。

最佳答案

您 friend 告诉您的内容类似于被动 FTP - 客户端告诉服务器它需要连接,服务器发回端口号,客户端创建到该端口的数据连接。

但是您只想做一个多线程服务器。您所需要的只是一个服务器套接字,用于监听和接受给定端口上的连接。自动 TCP 握手完成后,您将从 accept 函数中获得一个新套接字 - 该套接字将用于与刚刚连接的客户端进行通信。所以现在你只需要创建一个新线程,将那个客户端套接字传递给线程函数。在您的服务器线程中,您将再次调用 accept 以接受另一个连接。

关于c++ - 多线程服务器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com