mirror of
https://github.com/vlang/v.git
synced 2025-08-04 02:07:28 -04:00
Vanilla
Vanilla is a raw V server.
Description
This project is a simple server written in the V programming language. It aims to provide a minimalistic and efficient server implementation.
Features
- Lightweight and fast
- Minimal dependencies
- Easy to understand and extend
Installation
To install Vanilla, you need to have the V compiler installed. You can download it from the official V website.
Usage
To run the server, use the following command:
v -prod crun .
This will start the server, and you can access it at http://localhost:3000
.
Code Overview
Main Server
The main server logic is implemented in src/main.v.
The server is initialized and started in the main
function:
module main
const port = 3000
fn main() {
mut server := Server{
router: setup_router()
}
server.socket_fd = create_server_socket(port)
if server.socket_fd < 0 {
return
}
server.epoll_fd = C.epoll_create1(0)
if server.epoll_fd < 0 {
C.perror('epoll_create1 failed'.str)
C.close(server.socket_fd)
return
}
server.lock_flag.lock()
if add_fd_to_epoll(server.epoll_fd, server.socket_fd, u32(C.EPOLLIN)) == -1 {
C.close(server.socket_fd)
C.close(server.epoll_fd)
server.lock_flag.unlock()
return
}
server.lock_flag.unlock()
server.lock_flag.init()
for i := 0; i < 16; i++ {
server.threads[i] = spawn process_events(&server)
}
println('listening on http://localhost:${port}/')
event_loop(&server)
}
Test
CURL
curl -X GET --verbose http://localhost:3000/ &&
curl -X POST --verbose http://localhost:3000/user &&
curl -X GET --verbose http://localhost:3000/user/1
WRK
wrk --connection 512 --threads 16 --duration 10s http://localhost:3000
Valgrind
# Race condition check
v -prod -gc none .
valgrind --tool=helgrind ./vanilla_http_server