Libuv - 单个连接上的多个 TCP 请求

Libuv - multiple TCP requests on a single connection

使用 Libuv,我实现了一个调用另一个 TCP 服务器 B 的 TCP 服务器 A。

随着服务器 A 不断收到请求,我使用从 A 到 B 建立的单个 TCP 连接向服务器 B 发送请求。

鉴于 Libuv 是异步的和面向回调的,我如何区分服务器 B 的响应?即如何将正确的结果发送回服务器 A 的客户端?

文档说 uv_read_cb 回调将被调用多次。我如何知道 uv_read_cb 被要求用于哪个原始请求?

TCP 是基于流的,而不是基于消息的——您发送的不是单独的消息,而是未区分的数据流。所以简而言之,你要做的事情总是很棘手,处理完全取决于你。

您需要在 TCP 之上创建自己的协议。根据您的要求,这可能就像分配唯一 ID 并将其与响应一起发送一样简单。当然,您还必须自己处理消息转换——与任何基于 TCP 的消息协议一样。我强烈建议只使用单个线程将任何数据写入 TCP 流 - 您可以使用线程安全队列 post 消息,这样它们就不会被通常的异步写入破坏。

毫无疑问,读取回调将拾取碎片化和合并的消息。这是一个标准的 TCP 场景,您需要为此做好准备。这就是为什么我还推荐一个 reader,它将从流中读取,并且 post 每个已解析的消息到另一个队列。您可以根据需要使用随请求发送的唯一 ID 进行配对。