我想知道libevent是如何触发回调的。例如,假设客户端重复发送4字节消息。在服务器端,似乎不是每个4字节的发送都会触发一个读取回调。例如,我发现回调有时是在接收到8字节消息(或其他数字)时触发的。是否可以配置libevent,以便为从客户端发送的每一条4字节消息触发服务器端的读回调?
发布于 2015-07-27 18:51:55
我相信你的问题是发送,而不是接收。由于输出缓冲,Libevent可能没有立即发送数据,因此只有当客户端真正收到所发送的数据时,才会调用read回调。
见纳格尔算法 (又名TCP_NODELAY)。然后试着禁用它,看看是否真的是这样:
int flag = 1;
int ret = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));是否可以配置libevent,以便为从客户端发送的每一条4字节消息触发服务器端的读回调?
不怎么有意思。您可以“同时”接收多条消息,因为TCP是一种面向流的协议。您的应用程序唯一关心的是知道每条消息从何处开始和结束。
不考虑为了解释的目的,你通常会:
recv;https://stackoverflow.com/questions/31659490
复制相似问题