你建议我在C中缓冲多个流(每个流需要它自己的缓冲区)吗?
我有点在我脑海中汇总了一个解决方案:
这是理论上的“伪代码”
[ptr, ptr, ptr, ptr ... ]
每个ptr
都是指向结构的指针:
{
stream_id
buff_ptr
}
stream_id
是流的ID(我有该信息),buff_ptr
是指向某些malloc
ed数据的指针。此外,缓冲区可能必须是灵活的,它必须调用malloc
和free
以使其灵活(至少我认为它会吗?< / p>
我基本上会通过遍历ptr
s。
那么,“架构”是好还是有更好的?
如果有人想知道“为什么nyan她需要那个?!”我做了用Ruby / EventMachine的服务器,该协议是真烂(至少可以这样说),我不知道该怎么处理呢?除非有办法迫使EventMachine的缓冲对我来说,那我想是最佳解决方案。
感谢。
P.S:很抱歉! 〜答案 0 :(得分:1)
嗯,这似乎是唯一的选择,但你可以改变一些事情:
malloc
和free
。请改用realloc
迭代列表可能没问题但是如果有很多缓冲区
stream_id
搜索吗?例如glib2
provides such a hash 许多API(例如epoll)允许您将指针与id(epoll中的描述符)相关联。当该ID发生有趣的事情时,API会将指针传递给您 - &gt;以零4-8字节的内存为代价进行零搜索。
答案 1 :(得分:0)
使用libev创建一个简单的事件循环,让它处理轮询文件描述符。那里有很多例子,它的手册页(man 3 libev
)是我读过的最好的一个。
只需定义一些回调并为读写池创建一些缓冲区。只要在缓冲区填满或耗尽时阻塞或跳过读写操作,这些池的大小就可以保持静态。