O Libuv é uma biblioteca de suporte com várias plataformas, com foco na E/S assíncrona. Foi desenvolvido principalmente para uso pelo Node.js, mas também é usado por Luvit, Julia, Uvloop e outros.
Loop de eventos completos, apoiado por Epoll, Kqueue, IOCP, portas de eventos.
Soquetes assíncronos TCP e UDP
Resolução DNS assíncrona
Operações de sistema de arquivo e arquivos assíncronos
Eventos do sistema de arquivos
Ansi Escape Code controlou Tty
IPC com compartilhamento de soquete, usando soquetes de domínio UNIX ou tubos nomeados (Windows)
Processos infantis
Pool de threads
Manuseio de sinal
Relógio de alta resolução
Primitivos de rosqueamento e sincronização
Começando com a versão 1.0.0 Libuv segue o esquema de versão semântica. As regras de mudança de API e compatibilidade com versões anteriores são as indicadas por Semver. Libuv manterá um ABI estável nos principais lançamentos.
As alterações da ABI/API podem ser rastreadas aqui.
Libuv está licenciado sob a licença do MIT. Verifique os arquivos de licença e licença-extra.
A documentação é licenciada sob a licença CC por 4.0. Verifique o arquivo License-Docs.
Localizado no Docs/ Subdirectory. Ele usa a estrutura de esfinge, o que possibilita a criação da documentação em vários formatos.
Mostrar diferentes opções de construção suportadas:
$ make helpCrie documentação como HTML:
$ make htmlCrie documentação como HTML e viva recarregá-la quando mudar (isso exige que o Sphinx-Autobuild seja instalado e é suportado apenas no UNIX):
$ make livehtmlCrie documentação como Páginas Man:
$ make manCrie documentação como Epub:
$ make epubNota: os usuários do Windows precisam usar make.bat em vez de simples 'make'.
A documentação pode ser navegada online aqui.
Os testes e benchmarks também servem como exemplos de especificação e uso da API.
Esses recursos não são tratados por mantenedores da Libuv e podem estar desatualizados. Verifique -o antes de abrir novos problemas.
O Libuv pode ser baixado no repositório do GitHub ou no site de downloads.
Antes de verificar as tags Git ou arquivos de assinatura, é necessário importar as chaves relevantes. Os principais IDs estão listados no arquivo de mantenedores, mas também estão disponíveis como objetos Git BLOB para facilitar o uso.
Importando uma chave da maneira usual:
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059Importando uma chave de um objeto Git Blob:
$ git show pubkey-saghul | gpg --importAs tags Git são assinadas com a chave do desenvolvedor, elas podem ser verificadas da seguinte forma:
$ git verify-tag v1.6.1Começando com o Libuv 1.7.0, os Tarballs armazenados no site de downloads são assinados e um arquivo de assinatura que o acompanha fica ao lado de cada um. Depois que o Tarball de lançamento e o arquivo de assinatura forem baixados, o arquivo poderá ser verificado da seguinte forma:
$ gpg --verify libuv-1.7.0.tar.gz.signPara plataformas do tipo UNIX, incluindo o MacOS, existem dois métodos de construção: AutoTools ou CMake.
Para o Windows, o CMake é o único método de construção suportado e possui os seguintes pré -requisitos:
PATH global.Para construir com o AutoTools:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make installPara construir com 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 cruzar com cmake (não suportado, mas geralmente funciona):
$ cmake ../..
-DCMAKE_SYSTEM_NAME=Windows
-DCMAKE_SYSTEM_VERSION=6.1
-DCMAKE_C_COMPILER=i686-w64-mingw32-gcc$ brew install --HEAD libuvNota para usuários do OS X:
Certifique -se de especificar a arquitetura que deseja construir na bandeira "Archs". Você pode especificar mais de um delimitando com um espaço (por exemplo, "x86_64 i386").
$ git clone https://github.com/microsoft/vcpkg.git
$ ./bootstrap-vcpkg.bat # for powershell
$ ./bootstrap-vcpkg.sh # for bash
$ ./vcpkg install libuvVocê pode instalar binários pré-construídos para Libuv ou construí-lo a partir da fonte usando Conan. Use o seguinte comando:
conan install --requires= " libuv/[*] " --build=missingA receita de Libuv Conan é mantida atualizada por mantenedores de Conan e colaboradores da comunidade. Se a versão estiver desatualizada, crie uma solicitação de problema ou puxe no repositório ConancenteRIndex.
Alguns testes são sensíveis ao tempo. Os tempos de teste relaxantes podem ser necessários em máquinas lentas ou sobrecarregadas:
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s A lista de todos os testes está em test/test-list.h .
Essa invocação fará com que o driver de teste força e execute TEST_NAME em um processo infantil:
$ build/uv_run_tests_a TEST_NAMEEssa invocação fará com que o driver de teste execute o teste no mesmo processo:
$ build/uv_run_tests_a TEST_NAME TEST_NAME Ao executar o teste no processo de driver de teste ( build/uv_run_tests_a TEST_NAME TEST_NAME ), ferramentas como GDB e Valgrind funcionam normalmente.
Ao executar o teste de um filho do processo de driver de teste ( build/uv_run_tests_a TEST_NAME ), use essas ferramentas de maneira consciente do garfo.
Use a configuração de seguidores no modo de fork:
$ gdb --args build/uv_run_tests_a TEST_NAME
(gdb) set follow-fork-mode child
...
Use o parâmetro --trace-children=yes parâmetro:
$ 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 a seção sobre os testes em execução. O driver de benchmark é ./uv_run_benchmarks_a e os benchmarks estão listados no test/benchmark-list.h .
Verifique o arquivo suportado_platforms.
-fno-strict-aliasing Recomenda-se ativar a bandeira do compilador -fno-strict-aliasing em projetos que usam Libuv. O uso de "herança" ad hoc na API Libuv pode não ser segura na presença de otimizações do compilador que dependem do alias rígido.
O MSVC não possui uma bandeira equivalente, mas também não parece precisar dela no momento da redação deste artigo (dezembro de 2019.)
A compilação AIX usando IBM XL C/C ++ requer versão 12.1 ou superior.
O suporte do AIX para eventos do sistema de arquivos requer que o pacote IBM bos.ahafs não padrão seja instalado. Este pacote fornece a infraestrutura de eventos AIX que é detectada pelo autoconf . A documentação da IBM descreve o pacote com mais detalhes.
A compilação z/OS exige que o Zoslib seja instalado. Ao construir com cmake, use o sinalizador -DZOSLIB_DIR para especificar o caminho para o zoslib:
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build buildO z/OS cria o sistema v semáforos e as filas de mensagens. Eles persistem no sistema após o término do processo, a menos que o loop do evento esteja fechado.
Use o comando ipcrm para limpar manualmente os recursos do sistema v.
Veja as diretrizes para contribuir.