skywin3000 你好,感谢你实现并开源了这个库。冒昧以提issue的方式向你请教,我没找到其它联系你的方式,另外我想提成issue也可以让其他有同样疑问的使用者看到,也算有好处。
我在阅读《最佳实践》的时候,有几个疑问:
1。每次调用完ikcp_update之后,调用ikcp_check得到下次调用ikcp_update的时间,这个好理解,但是当有ikcp_input发送之后,为什么不马上调用ikcp_update而还是要等到上次ikcp_check所确定的时延之后再调用ikcp_update呢?毕竟上次调用ikcp_check时并不知道马上会有ikcp_input,所以推算出来的时延在马上发生ikcp_input之后就变得不正确了(偏长了),这是我的理解。
2。所有文章里面我都没有找到如何调用ickp_recv函数,我应该用什么策略或说机制去调用它,比如我想到的就是定时去调用它,那么定时多久呢?调用的时候,应该是每次调用返回一个udp消息吧?我是不是要循环调用直到它返回没有消息?另外,除了定时调用,有没有在某种情况下,我需要提前调用 (比如在ikcp_input之后马上调用)?
3。ikcp_recv为何不做成像output回调函数一次,库来回调(应该是在ikcp_update里面来回调)?
谢谢。
1条答案
按热度按时间9rygscc11#
ikcp_input是给kcp投喂收到的消息,这个消息是从udp/tcp过来的数据,所以是下层协议监听到的消息,那么下层协议做recv的操作时机应该是在触发了socket可读事件来的,可以采用select/epoll/iocp模型来监听socket的可读可写事件,收到数据后再投喂给ikcp_input,调用完ikcp_input后需要判断是否收到数据ikcp_peeksize,ikcp_recv只是把数据从rcv_queue中挪到用户的buffer中