- Notifications
You must be signed in to change notification settings - Fork3
cotag/libuv
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Libuv is a cross platform asynchronous IO implementation that powers NodeJS. It supports sockets, both UDP and TCP, filesystem watch, TTY, Pipes and other asynchronous primitives like timer, check, prepare and idle.
The Libuv gem contains Libuv and a Ruby wrapper that implementspipelined promises for asynchronous flow control andcoroutines /futures for untangling evented code
Libuv supports multiple reactors that can run on different threads.
For convenience the thread local or default reactor can be accessed via thereactor methodYou can pass a block to be executed on the reactor and the reactor will run until there is nothing left to do.
require'libuv'reactordo |reactor|reactor.timer{puts"5 seconds passed"}.start(5000)endputs"reactor stopped. No more IO to process"
Promises are used to simplify code flow.
require'libuv'reactordo |reactor|reactor.tcp{ |data,socket|puts"received:#{data}"socket.close}.connect('127.0.0.1',3000){ |socket|socket.start_read.write("GET / HTTP/1.1\r\n\r\n")}.catch{ |error|puts"error:#{error}"}.finally{puts"socket closed"}end
Continuations are used if callbacks are not defined
require'libuv'reactordo |reactor|beginreactor.tcp{ |data,socket|puts"received:#{data}"socket.close}.connect('127.0.0.1',3000).start_read.write("GET / HTTP/1.1\r\n\r\n")rescue=>errorputs"error:#{error}"endend
Any promise can be converted into a continuation
require'libuv'reactordo |reactor|# Perform work on the thread pool with promisesreactor.work{10 *2}.then{ |result|puts"result using a promise#{result}"}# Use the coroutine helper to obtain the result without a callbackresult=reactor.work{10 *3}.valueputs"no additional callbacks here#{result}"end
Check out theyard documentation
gem install libuv
or
git clone https://github.com/cotag/libuv.gitcd libuv bundle install rake compile- The installation on BSD/Linux requirespython 2.x to be installed and available on the PATH
- setting the environmental variable
USE_GLOBAL_LIBUVwill prevent compiling the packaged version.- if you have a compatible
libuv.(so | dylib | dll)on the PATH already
- if you have a compatible
On Windows the GEM ships with a pre-compiled binary. If you would like to build yourself:
- A copy of Visual Studio 2017.Visual Studio Build Tools works fine.
- Windows 10 SDK
- C++/CLI Support
- C++ tools for CMake
- A copy ofOpenSSL x64 - ~30MB installs
- ruby 2.4+ x64 with MSYS2 is preferred
- Add the env var
set GYP_MSVS_VERSION=2017 - If using jRuby thenGCC is also required
- Setup the paths as described on the gcc page
- Add required environmental variable
set LIBRARY_PATH=X:\win-builds-64\lib;X:\win-builds-64\x86_64-w64-mingw32\lib
rake compile
- TCP (with TLS support)
- UDP
- TTY
- Pipes
- Timer
- Prepare
- Check
- Idle
- Signals
- Async callbacks
- Async DNS Resolution
- Filesystem Events
- Filesystem manipulation
- File manipulation
- Errors (with a catch-all fallback for anything unhandled on the event reactor)
- Work queue (thread pool)
- Coroutines / futures (makes use of Fibers)
You can host a TLS enabled server with multiple hostnames using SNI.
server=reactor.tcpserver.bind('0.0.0.0',3000, **{hosts:[{private_key:'/blah.key',cert_chain:'/blah.crt',host_name:'somehost.com',},{private_key:'/blah2.key',cert_chain:'/blah2.crt',host_name:'somehost2.com'},{private_key:'/blah3.key',cert_chain:'/blah3.crt',host_name:'somehost3.com'}]})do |client|client.start_tlsclient.start_readend# at some point laterserver.add_host(private_key:'/blah4.key',cert_chain:'/blah4.crt',host_name:'somehost4.com')server.remove_host('somehost2.com')
You don't have to specify any hosts at binding time.
- [HTTP](https://github.com/cotag/uv-rays - with SNI [server name indication] support)
- Faraday plugin
- HTTPI plugin
- HTTP2
- SOAP (using HTTPI plugin)
- SNMP
About
Ruby bindings for libuv
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Languages
- Ruby99.9%
- Shell0.1%