kcpuv
kcpuv copied to clipboard
探讨一下框架结构
我一直在用libuv做开发 本来很想尝试改下然后嵌入到我们的项目。但是发现框架影响太大了。
不知道是不是我没太理解清楚还是别的原因
个人感觉应该实现应该只提供好连接管理就行了,不要在上面再做一层libuv的封装。 如果再做一层libuv的封装,把uv_run都隐藏了,这样对其他已有libuv的项目来说结构影响太大?
个人觉得理想的方式是:
服务器:
uv_loop *loop;
kcpuv_server_init(loop, kcp_server);
kcpuv_bind(kcp_server , addr);
kcpuv_listen(kcp_server);
kcpuv_server_start(kcp_server , on_peer_connect_handle);
void on_peer_connect_handle(kcp_server) {
kcp_client *peer = kcpuv_peer_init(loop);
kcpuv_accept(kcp_server, peer);
kcpuv_start_read(peer, on_data_handle);
}
客户端:
kcpuv_client_init(loop, kcp_client);
kcpuv_connect(kcp_client, addr);
kcpuv_client_start(kcp_server , on_client_connect_handle);
void on_client_connect_handle(kcp_client) {
kcpuv_start_read(kcp_client, on_read_handle);
}
另外,libuv本身是C89,我觉得如果是要做这种封装,最好也是用C89
不太清楚你的具体需求,这里是为了把LIBUV和KCP弄在一起。跟封装LIBUV没什么关系。
嗯,我的意思是,你这样写暴露给别人用的话,已经把libuv原有的接口全部隐藏了 真正别人想用到libuv其他的接口反而拿不到了 比如说 loop是由你自己的模块生成的,而不是外部提供的
uv_run这个已经被你的kcpuv_run给封装掉了,使用者不能自己直接调用uv_run 这样代码改动太大 如果别人要用你的库,就得替换掉原有项目的uv_run 个人觉得不应该入侵别人的代码去做封装
不知道我有没有没说清楚
我先读一下connection管理那块的代码 改天有空了实现一版我说的方式
理解,你的需求如果是那样的话,可能就需要改改代码了。姑且把这个当做一个示例吧,反正也没多少代码。