Libuv es una biblioteca de soporte multiplataforma con un enfoque en la E/S asincrónica. Fue desarrollado principalmente para su uso por Node.js, pero también es utilizado por Luvit, Julia, Uvloop y otros.
Bucle de eventos con todas las funciones respaldado por Epoll, Kqueue, IOCP, puertos de eventos.
TCP TCP y UDP asincrónicos
Resolución de DNS asíncrono
Operaciones asincrónicas del sistema de archivos y archivos
Eventos del sistema de archivos
Código de escape de ANSI controlado TTY
IPC con el intercambio de sockets, utilizando enchufes de dominio UNIX o tuberías con nombre (Windows)
Procesos para niños
Piscina
Manejo de la señal
Reloj de alta resolución
Primitivas de hilo y sincronización
Comenzando con la versión 1.0.0 Libuv sigue el esquema de versiones semánticas. El cambio de API y las reglas de compatibilidad hacia atrás son las indicadas por Semver. Libuv mantendrá un ABI estable en los principales lanzamientos.
Los cambios ABI/API se pueden rastrear aquí.
Libuv tiene licencia bajo la licencia MIT. Verifique los archivos de licencia y licencia-Extra.
La documentación tiene licencia bajo la licencia CC por 4.0. Verifique el archivo de Docs de licencia.
Ubicado en los documentos/ subdirectorio. Utiliza el marco Sphinx, lo que permite construir la documentación en múltiples formatos.
Mostrar diferentes opciones de construcción compatibles:
$ make helpConstruir documentación como HTML:
$ make htmlConstruya la documentación como HTML y Live Recarg It cuando cambia (esto requiere Sphinx-Autobuild para instalar y solo se admite en UNIX):
$ make livehtmlConstruir documentación como páginas de hombre:
$ make manConstruir documentación como EPUB:
$ make epubNota: Los usuarios de Windows deben usar make.bat en lugar de 'make' simple.
La documentación se puede navegar en línea aquí.
Las pruebas y puntos de referencia también sirven como ejemplos de especificación de API y uso.
Estos recursos no son manejados por los mantenedores de Libuv y pueden estar desactualizados. Por favor, verifíquelo antes de abrir nuevos problemas.
Libuv se puede descargar desde el repositorio de GitHub o del sitio de descargas.
Antes de verificar las etiquetas GIT o los archivos de firma, es necesario importar las claves relevantes. Los ID clave se enumeran en el archivo Mantenedores, pero también están disponibles como objetos Git Blob para facilitar el uso.
Importar una clave de la manera habitual:
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059Importar una clave desde un objeto Git Blob:
$ git show pubkey-saghul | gpg --importLas etiquetas GIT están firmadas con la clave del desarrollador, se pueden verificar de la siguiente manera:
$ git verify-tag v1.6.1Comenzando con Libuv 1.7.0, los tarballs almacenados en el sitio de descargas están firmados y un archivo de firma acompañante se encuentra junto a cada uno. Una vez que se descargan tanto el Tarball y el archivo de firma, el archivo se puede verificar de la siguiente manera:
$ gpg --verify libuv-1.7.0.tar.gz.signPara plataformas similares a UNIX, incluidos MacOS, hay dos métodos de compilación: AutoTools o CMake.
Para Windows, CMake es el único método de construcción compatible y tiene los siguientes requisitos previos:
PATH global.Para construir con Autotools:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make installConstruir con cmake:
$ mkdir -p build
$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests
$ cmake --build build # add `-j <n>` with cmake >= 3.12
# Run tests:
$ (cd build && ctest -C Debug --output-on-failure)
# Or manually run tests:
$ build/uv_run_tests # shared library build
$ build/uv_run_tests_a # static library buildPara compilar con cmake (no compatible pero generalmente funciona):
$ cmake ../..
-DCMAKE_SYSTEM_NAME=Windows
-DCMAKE_SYSTEM_VERSION=6.1
-DCMAKE_C_COMPILER=i686-w64-mingw32-gcc$ brew install --HEAD libuvNota para los usuarios de OS X:
Asegúrese de especificar la arquitectura que desea construir en la bandera "Archs". Puede especificar más de uno delimitando con un espacio (por ejemplo, "x86_64 i386").
$ git clone https://github.com/microsoft/vcpkg.git
$ ./bootstrap-vcpkg.bat # for powershell
$ ./bootstrap-vcpkg.sh # for bash
$ ./vcpkg install libuvPuede instalar binarios preconstruidos para libuv o construirlo desde la fuente usando Conan. Use el siguiente comando:
conan install --requires= " libuv/[*] " --build=missingLa receta de Libuv Conan se mantiene actualizada por los mantenedores de Conan y los contribuyentes de la comunidad. Si la versión está desactualizada, cree un problema o extraiga la solicitud en el repositorio de ConancenterIndex.
Algunas pruebas son sensibles a tiempo. Los tiempos de espera de la prueba de relajación pueden ser necesarios en máquinas lentas o sobrecargadas:
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s La lista de todas las pruebas está en test/test-list.h .
Esta invocación hará que el controlador de prueba bifurque y ejecute TEST_NAME en un proceso infantil:
$ build/uv_run_tests_a TEST_NAMEEsta invocación hará que el controlador de prueba ejecute la prueba en el mismo proceso:
$ build/uv_run_tests_a TEST_NAME TEST_NAME Al ejecutar la prueba desde el proceso del controlador de prueba ( build/uv_run_tests_a TEST_NAME TEST_NAME ), las herramientas como GDB y Valgrind funcionan normalmente.
Al ejecutar la prueba de un hijo del proceso de controlador de prueba ( build/uv_run_tests_a TEST_NAME ), use estas herramientas de manera consciente de la bifurcación.
Use la configuración del modo de seguimiento de la bolsa:
$ gdb --args build/uv_run_tests_a TEST_NAME
(gdb) set follow-fork-mode child
...
Use el parámetro --trace-children=yes :
$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full --track-origins=yes --leak-resolution=high --show-reachable=yes --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME Consulte la sección sobre pruebas en ejecución. El controlador de referencia es ./uv_run_benchmarks_a y los puntos de referencia se enumeran en test/benchmark-list.h .
Verifique el archivo Soported_platforms.
-fno-strict-aliasing Se recomienda activar la bandera del compilador -fno-strict-aliasing en proyectos que usan libuv. El uso de la "herencia" ad hoc en la API libuv puede no ser seguro en presencia de optimizaciones del compilador que dependen del alias estricto.
MSVC no tiene una bandera equivalente, pero tampoco parece necesitarlo al momento de escribir (diciembre de 2019)
La compilación AIX usando IBM XL C/C ++ requiere la versión 12.1 o más.
El soporte de AIX para los eventos del sistema de archivos requiere que se instale el paquete no predeterminado IBM bos.ahafs . Este paquete proporciona la infraestructura de eventos AIX que detecta autoconf . La documentación de IBM describe el paquete con más detalle.
La compilación Z/OS requiere que Zoslib se instale. Al construir con cmake, use el flag -DZOSLIB_DIR para especificar la ruta a Zoslib:
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build buildZ/OS crea semáforos del Sistema V y colas de mensajes. Estos persisten en el sistema después de que el proceso termine a menos que el bucle de eventos esté cerrado.
Use el comando ipcrm para borrar manualmente los recursos del sistema V.
Vea las pautas para contribuir.