【发布时间】:2015-06-23 20:21:59
【问题描述】:
我想要一些关于如何设计处理可变大小消息的服务器的反馈或建议。
为了简化答案,我们假设:
读取的代码,为了清晰起见做了一些简化,如下所示:
如果(客户端->可读){ if (client->remaining > 0) { /* 为清晰而简化 - 假设我们总是能够读取 1+ 个字节 */ rd = read(client->sock, client->buffer, client->remaining); 客户端->缓冲区+= rd; 客户->剩余-= rd; } 别的 { /* 为清晰而简化 - 假设我们总是能够读取 4 个字节 */ 读取(客户端->袜子,&(客户端->剩余),4); 客户端->缓冲区=acquire_ringbuf_slot(客户端->剩余); } }请不要专注于 4 字节。只是假设我们在开始时是否压缩了数据大小对于本次讨论没有影响。
现在,问题是:执行上述操作的最佳方法是什么?
【问题讨论】:
-
IMO,如果您正在处理缓冲 I/O。读取的调用次数并不重要。 read() 只会去缓冲区并获取(或等待)字节数并返回。
-
我相信真实代码中存在错误检查。
rd可以为零,表示一件事,或 -1,表示另一件事,或正数,表示第三个。 -
让我编辑,并添加第 3 个 SIMPLIFIED FOR CLARITY,因为它似乎不清楚...
标签: c network-programming