Libevent
C extension to libevent library
Install / Use
/learn @ayanko/LibeventREADME
Libevent
C extension to libevent library.
Description
The nice feature of libevent is it already contains build in HTTP server (evhttp).
Currently libevent extension implements mostly http server.
Dependencies
- libevent v2
Documentation
Please read libevent rubydoc
Installation
gem install libevent
Using Libevent HTTP server
Check samples directory
From scratch
Simple server
require "libevent"
# create event base
base = Libevent::Base.new
# create http server instance
http = Libevent::Http.new(base)
# bind socket
http.bind_socket("0.0.0.0", 15015)
# set handler
http.handler do |request|
request.send_reply(200, {}, ["Hello World\n"])
end
# catch SIGINT
base.trap_signal("INT") { base.exit_loop }
# start libevent loop
base.dispatch
Check with curl
$ curl -v http://localhost:15015
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-unknown-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.0e zlib/1.2.5 libssh2/1.3.0
> Host: localhost:15015
> Accept: */*
>
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Date: Fri, 18 Nov 2011 19:09:04 GMT
< Content-Type: text/html; charset=ISO-8859-1
<
Hello World
Server with virtual hosts
require "libevent"
Libevent::Builder.new do
server "0.0.0.0", 3000 do |http|
http.handler do |request|
case request.get_uri_path
when '/hello'
request.send_reply 200, { 'Content->Type' => 'text/plain'}, [ "Hello World" ]
when '/api'
request.send_reply 200, { 'Content->Type' => 'application/json'}, [ "{\"version\":\"1.0\"}" ]
else
request.send_error 404, "Nothing Found"
end
end
http.vhost "blog.local" do |host|
host.handler do |request|
request.send_reply 200, {}, ["It's blog"]
end
end
http.vhost "wiki.local" do |host|
host.handler do |request|
request.send_reply 200, {}, ["It's wiki"]
end
end
http.vhost "*.local" do |host|
host.handler do |request|
request.send_error 404, "Please use blog.local or wiki.local"
end
end
end
server "0.0.0.0", 3001 do |http|
http.handler do |request|
request.send_reply 200, { 'Content->Type' => 'text/plain'}, [ "Hello World 3001" ]
end
end
signal("INT") do
base.exit_loop
end
signal("HUP") do
Kernel.puts "HUP received ..."
end
dispatch
end
Serve Rails application
Add to Gemfile
gem "libevent", :require => false
Update gems
$ bundle install
Run application
$ script/rails s Libevent
Or via rackup
$ bundle exec rackup -s Libevent -p 3000
Serve Rack application
Check rack handler rack/handler/libevent.rb
References
Related Skills
node-connect
341.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.4kCommit, push, and open a PR
