All Projects → tinylcy → Vino

tinylcy / Vino

Licence: mit
Vino is a lightweight and efficient web server.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Vino

async
⏱ Promises and reactive-streams in Swift built for high-performance and scalability.
Stars: ✭ 35 (-80.66%)
Mutual labels:  epoll, non-blocking
Libhv
🔥 比libevent、libuv更易用的国产网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket client/server.
Stars: ✭ 3,355 (+1753.59%)
Mutual labels:  webserver, epoll
netpoll
Package netpoll implements a network poller based on epoll/kqueue.
Stars: ✭ 38 (-79.01%)
Mutual labels:  epoll, non-blocking
hasses
Hyper's Asynchronous Server Sent event (SSE) notification Server
Stars: ✭ 18 (-90.06%)
Mutual labels:  webserver, epoll
Beetlex
high performance dotnet core socket tcp communication components, support TLS, HTTP, HTTPS, WebSocket, RPC, Redis protocols, custom protocols and 1M connections problem solution
Stars: ✭ 802 (+343.09%)
Mutual labels:  non-blocking, webserver
netman
高性能的TCP网络框架、支持TLS、可配置的路由、websocket、基于事件循环(epoll),百万连接(C1000K)
Stars: ✭ 96 (-46.96%)
Mutual labels:  epoll, non-blocking
WebServer
C++高性能网络服务器
Stars: ✭ 53 (-70.72%)
Mutual labels:  webserver, epoll
Webserver
A C++ Lightweight Web Server based on Linux epoll
Stars: ✭ 135 (-25.41%)
Mutual labels:  epoll, webserver
Gnet
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。
Stars: ✭ 5,736 (+3069.06%)
Mutual labels:  non-blocking, epoll
Webserver
A C++ High Performance Web Server
Stars: ✭ 4,164 (+2200.55%)
Mutual labels:  epoll, webserver
Webcpp
用C++开发web服务器框架
Stars: ✭ 23 (-87.29%)
Mutual labels:  epoll, webserver
Webserver
High-performance web server written in C++
Stars: ✭ 175 (-3.31%)
Mutual labels:  epoll, webserver
Nginx
A fairly flexible and feature full Ansible role for the NGINX web server.
Stars: ✭ 151 (-16.57%)
Mutual labels:  webserver
Android Http Server
A complete zero-dependency implementation of a web server and a servlet container in Java with a sample Android application.
Stars: ✭ 158 (-12.71%)
Mutual labels:  webserver
Piadvanced
This started as a custom install for my pihole!
Stars: ✭ 144 (-20.44%)
Mutual labels:  webserver
Gofast
gofast is a FastCGI "client" library written purely in go
Stars: ✭ 140 (-22.65%)
Mutual labels:  webserver
Rayo.js
Micro framework for Node.js
Stars: ✭ 170 (-6.08%)
Mutual labels:  webserver
Eomaia
一个基于reactor模式的Linux/C++网络库,支持one loop per thread机制。
Stars: ✭ 159 (-12.15%)
Mutual labels:  epoll
Owasp Mth3l3m3nt Framework
OWASP Mth3l3m3nt Framework is a penetration testing aiding tool and exploitation framework. It fosters a principle of attack the web using the web as well as pentest on the go through its responsive interface.
Stars: ✭ 139 (-23.2%)
Mutual labels:  webserver
Lotos
tiny but high-performance HTTP Server
Stars: ✭ 140 (-22.65%)
Mutual labels:  epoll

Vino

Vino is a lightweight and efficient web server written in the C programming language.

Compile and run

For now Vino only support Linux 2.6 or later.

Please make sure you have cmake installed.

mkdir build && cd build
cmake .. && make
./vino

If you want to build for debug and print debug information when compiling, use cmake -DCMAKE_BUILD_TYPE=Debug <path>. If you want to enable profiling, you can use cmake -DCMAKE_C_FLAGS=-pg <path>.

By default the server accepts connections on port 8080, if you want to assign other port for the server, run it as ./vino -p|--port <port>. For more options, please type ./vino -h|--help into terminal.

Features

  • [x] Single-threaded, non-blocking I/O based on event-driven model
  • [x] HTTP persistent connection (HTTP Keep-Alive)
  • [x] A timer for executing the handler after having waited the specified number of milliseconds
  • [x] A parser for extracting request line and headers from HTTP request message
  • [x] A unified memory pool
  • [x] HTTP GET method

Performance

I have made a small performance test with Nginx, a high-performance web server and reverse proxy (I have learned a lot from it). In a way it is not a fair comparison, for the processing logic in Vino is relatively simpler than Nginx.

ab -n 10000 -c 500 http://<IP>:<PORT>/index.html
cpu: Intel(R) Xeon(R) CPU L5630  @ 2.13GHz, 8 cores.
mem: 32GB.

Nginx

Server Software:        nginx/1.0.14
Server Hostname:        scut.xxxx.com
Server Port:            80

Document Path:          /index.html
Document Length:        151 bytes

Concurrency Level:      500
Time taken for tests:   5.193 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      3620000 bytes
HTML transferred:       1510000 bytes
Requests per second:    1925.85 [#/sec] (mean)
Time per request:       259.626 [ms] (mean)
Time per request:       0.519 [ms] (mean, across all concurrent requests)
Transfer rate:          680.82 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        7   93 292.0     20    2281
Processing:     4  104 257.5     20    4206
Waiting:        4  100 255.2     20    4206
Total:         20  197 416.3     41    4250

Percentage of the requests served within a certain time (ms)
  50%     41
  66%     47
  75%     57
  80%    250
  90%    673
  95%   1053
  98%   1504
  99%   2158
 100%   4250 (longest request)
 

Vino

Server Software:        Vino
Server Hostname:        scut.xxxx.com
Server Port:            8080

Document Path:          /index.html
Document Length:        151 bytes

Concurrency Level:      500
Time taken for tests:   4.855 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2490000 bytes
HTML transferred:       1510000 bytes
Requests per second:    2059.81 [#/sec] (mean)
Time per request:       242.741 [ms] (mean)
Time per request:       0.485 [ms] (mean, across all concurrent requests)
Transfer rate:          500.87 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        6  108 287.3     21    2305
Processing:     3   91 180.7     21    1987
Waiting:        3   87 178.3     20    1987
Total:         15  199 360.5     43    3165

Percentage of the requests served within a certain time (ms)
  50%     43
  66%     51
  75%    200
  80%    269
  90%    724
  95%   1060
  98%   1289
  99%   1644
 100%   3165 (longest request)

TODO

  • [ ] FastCGI
  • [ ] HTTP POST and other methods
  • [ ] More HTTP/1.1 features
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].