libuv 使用点滴

Posted bywayboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了libuv 使用点滴相关的知识,希望对你有一定的参考价值。

对于一个纯C语言实现的网络库来说,libuv 作为Node的跨平台抽象层,有着良好的性能,有Node 这个成熟项目提供营养,其可用性有了保障。但有些地方还是比较晦涩。

最近在写一个C/S架构项目,服务器端和客户端均采用了libuv作为网络库,在编写服务器的时候,Server端极少情况会出现莫名其妙的崩溃现象。经过多次调试,发现崩溃的时机一般是服务器正在发送一个大数据,比如发送一个文件,而客户端此时突然关闭,或者网络断开的时候。

对于网络断开事件 libuv没有设计专门的回调函数来进行处理,而是在 uv_read_start 所指定的回调函数中产生一个onread事件,通过 指定参数 nread < 0 来表示网络发生了断开事件.

当连接断开时 服务器会根据断开原因,收到 UV_EOF 或者 UV_ECONNRESET 事件, 而此时 uv_tcp 已经不能再用作写出数据。否则会产生一个异常。因此 正确的做法是 当收到 UV_EOF 的时候应当立即调用 uv_close() 来关闭连接。而非使用 uv_shutdown.

以上是关于libuv 使用点滴的主要内容,如果未能解决你的问题,请参考以下文章

编译Libuv

使用 libuv 捕获子进程的标准输出

使用 IO 操作时如何不让任务过度饱和 libuv

libuv之三:文件系统

什么是libuv?

libuv之二:libuv基础