kcpuv icon indicating copy to clipboard operation
kcpuv copied to clipboard

探讨一下框架结构

Open rocaltair opened this issue 8 years ago • 3 comments

我一直在用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

rocaltair avatar Nov 25 '16 09:11 rocaltair

不太清楚你的具体需求,这里是为了把LIBUV和KCP弄在一起。跟封装LIBUV没什么关系。

elisaday avatar Nov 25 '16 09:11 elisaday

嗯,我的意思是,你这样写暴露给别人用的话,已经把libuv原有的接口全部隐藏了 真正别人想用到libuv其他的接口反而拿不到了 比如说 loop是由你自己的模块生成的,而不是外部提供的

uv_run这个已经被你的kcpuv_run给封装掉了,使用者不能自己直接调用uv_run 这样代码改动太大 如果别人要用你的库,就得替换掉原有项目的uv_run 个人觉得不应该入侵别人的代码去做封装

不知道我有没有没说清楚

我先读一下connection管理那块的代码 改天有空了实现一版我说的方式

rocaltair avatar Nov 25 '16 10:11 rocaltair

理解,你的需求如果是那样的话,可能就需要改改代码了。姑且把这个当做一个示例吧,反正也没多少代码。

elisaday avatar Dec 01 '16 07:12 elisaday