我想知道libevent如何触发回调。例如,假设客户端重复发送一个4字节的消息。在服务器端,似乎不是每个4字节发送都会触发读回调。例如,我发现有时在接收8字节消息(或其他数字)时触发回调。是否可以配置libevent,以便为客户端发送的每个4字节消息触发服务器端的读回调?
答案 0 :(得分:2)
我相信你的问题是关于发送,而不是接收。由于输出缓冲,Libevent可能无法立即立即发送您的数据,因此只有在客户端真正收到您提供的数据时才会调用read
回调发送。
请参阅 Nagle's algorithm (又名TCP_NODELAY
)。然后尝试禁用它以查看是否真的如此:
int flag = 1;
int ret = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));
是否可以配置libevent,以便为客户端发送的每个4字节消息触发服务器端的读回调?
不是真的。您可能会收到多条消息"同时"因为TCP是面向流的协议。您的应用程序唯一关心的是知道每条消息的开始和结束位置。
无视解释的目的,通常是:
recv
;