【发布时间】:2013-11-18 18:43:54
【问题描述】:
基于以下代码,我构建了一个回显服务器版本,但具有线程延迟。这是因为我注意到在初始连接时,我的第一次发送被发送回客户端,但客户端直到第二次发送才收到它。我的实际用例是我需要向服务器发送消息,进行大量处理,然后将结果发回......比如说 10-30 秒后(在某些情况下可能是几个小时)。
http://www.wangafu.net/~nickm/libevent-book/Ref8_listener.html
这是我的代码。为简洁起见,我只包含了与 libevent 相关的代码;不是线程代码或其他东西。调试时,新连接建立,字符串缓冲区填满,调试显示写入成功。
但我只收到来自最后发送的回声。我从客户端发送数字来验证这一点,当我从客户端发送 1 时,我没有通过 echo 从服务器接收任何内容......即使服务器肯定使用 evbuffer_add 写入缓冲区(我也尝试过使用 bufferevent_write_buffer )。
当我从客户端发送 2 时,我会收到前一次发送的 1。就像我的写入被缓存了......我已经关闭了nagle。
所以,我的问题是:libevent 缓存是否使用以下方法发送?
evbuffer_add(outputBuffer, 缓冲区, 长度);
有没有办法刷新这个缓存?是否有其他方法可以将缓存标记为已完成或已完成?我可以强制发送吗?它从不自行发送...我什至延迟了。每次将 evbuffer_add 替换为“send”都能完美运行。
【问题讨论】:
标签: caching network-programming libevent