kcp 介绍与源代码分析_asio-kcp源码分析

asio kcp代码走读

(1)kcp_client_wrap类

a 提供方法接口如下:

send_msg

kcp_client_.send_msg(msg);

stop //等待工作线程退出

set_event_callback

connect //main函数中调用connect进行kcp client的初始化

kcp_client_.connect_async

do_asio_kcp_connect_loop

connect_async

connect_result

b 包含的私有方法:

start_workthread

client_event_callback_func

handle_client_event_callback

do_asio_kcp_connect_loop

while(){kcp_client_.update();} //主线程中kcp的tick

workthread_loop //工作线程入口函数

do_workthread_loop

while(){kcp_client_.update();} //工作线程中kcp的tick,kcp update时间间隔是KCP_UPDATE_INTERVAL 5ms

c 封装的成员变量有:

kcp_client kcp_client_;

相关状态变量

d kcp client创建实例:

asio_kcp::kcp_client_wrap net;

Client client;

net.set_event_callback(Client::client_event_callback, (void*)(&client));

int ret = net.connect(0, "127.0.0.1", 32323);

asio_kcp::millisecond_sleep(10);

net.send_msg(std::string("1234567890"));

asio_kcp::millisecond_sleep(510);

(2)kcp_client类

a 提供方法接口如下:

connect_async

init_udp_connect

//设置udp连接的状态,in_connect_stage_置为true,获得当前时间作为connect_start_time_

send_msg //主线程调用此函数将待发送消息push到发送队列中,供工作线程使用

send_msg_queue_.push(msg);

update

do_asio_kcp_connect //向udp server发送“标志连接”的消息,并请求udp server端分配kcp conv

//若udp连接成功 (connect_succeed_字段为true,当client的kcp初始化完成)

do_send_msg_in_queue //一次全部取出发送队列中的消息,并调用ikcp_send,交给kcp模块进行处理

while(){ikcp_send();}

do_recv_udp_packet_in_loop

recv

handle_udp_packet

is_disconnect_packet //是否断连消息

ikcp_input //交给kcp将收到的udp消息由kcp消息格式转化为应用层消息格式

while(1){recv_udp_package_from_kcp();}//

//recv_udp_package_from_kcp()的内容:

ikcp_recv //利用ikcp_recv获取经kcp解析(去掉头)后的应用层消息

ikcp_update

//距上次ts_flush超过一定阈值,则调用ikcp_flush,并更新kcp->ts_flush

ikcp_flush //利用ikcp_output调用注册的回调函数将各类kcp消息(ack/数据/请求窗口/告知窗口)发送给udp server

b 包含的私有方法:

init_udp_connect

//servaddr_内容填充,udp服务端ip、监听端口号、

socket //SOCK_DGRAM,建立udp socket,设置为非阻塞模式

bind//填充struct sockaddr_in bind_addr,利用bind绑定本地端口号

connect(udp_socket_, &servaddr_,...) //

connect_timeout //kcp重连时间间隔 500ms

need_send_connect_packet

do_asio_kcp_connect

do_send_connect_packet

try_recv_connect_back_packet //

udp_output //静态方法,在kcp模块中被调用,下面方法所属的应用层类实例指针为kcp_client*

((kcp_client*)user)->send_udp_package(buf, len); //

send//利用应用层创建的udp网络连接将kcp封装后的udp消息发送出去

send_udp_package

send//利用应用层创建的udp网络连接将kcp封装后的udp消息发送出去

do_send_connect_packet

making_connect_packet //udp client向udp server发送特定“标志连接”的消息,用于udp服务端记录udp client信息

send

do_recv_udp_packet_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值