我知道HTTP块就是这样
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
服务器将响应数据发送到客户端时,服务器应该逐块发送数据吗?
例如,
服务器==>客户端,首先发送标头,然后发送第一个块:
7\r\n
Mozilla\r\n
然后是第二个块,依此类推。
服务器可以按照以下方式发送数据:
第一个write
7\r\n
Mozill
秒write
a\r\n
9\r\n
Developer\r\n
7\r\n
以此类推?
答案 0 :(得分:0)
TCP是用于传输字节流的协议。在TCP级别上,由不同write
发送的数据之间没有相关的边界。实际上,如果您彼此之后不久执行多个write
或send
,则来自这些调用的数据通常最终会一起存储在同一网络数据包(Nagle algorithm)中,并且也会在同一位置读取它们接收方结束。
这意味着,如果您先写3\r\n
之类的部分块,然后再写123\r\n
,而不是完整的块3\r\n123\r\n
,则没关系。您甚至可以在单个write
或send
中写入多个块或1.5个块等。
但也请注意,总是有一些客户端的开发人员无法正确理解套接字和TCP的工作原理,并假设您的send
就是您的recv
或假定他们将始终获得完整的信息。具有单个recv
的块或具有类似的错误假设。尽管您可能会尝试对此类损坏的应用程序友好,但您也可能会故意破坏这些应用程序,以使它们尽早得到修复,而不是稍后再显示随机且不可复制的问题。