# Multi-Threaded Web Server

[rust-book.cs.brown.edu](https://rust-book.cs.brown.edu/ch20-00-final-project-a-web-server.html)

A simple, multi-threaded web server implemented in Rust.

## Features

- Multi-threaded architecture using a thread pool
- TCP listener for handling incoming connections
- Serves static HTML files (index.html, 404.html)
- Basic HTTP response formatting

## Usage

1. Clone the repository
2. Run the server:

   ```
   cargo run
   ```
3. Access the server at `http://localhost:7878`

## Implementation Details

### Thread Pool

- Manages a fixed number of worker threads
- Distributes incoming requests across available threads

### TCP Listener

- Listens for incoming connections on port 7878
- Passes connections to the thread pool for processing

### Request Handling

- Parses incoming HTTP requests
- Serves `index.html` for root path ("/")
- Returns `404.html` for unrecognized paths


### Response Format

- HTTP-Version Status-Code Reason-Phrase CRLF  //example: HTTP/1.1 200 OK\r\n\r\n
- headers CRLF
- message-body

### Sleep Simulation

- Simulates a slow request by sleeping for 5 seconds when accessing "/sleep"

### Graceful Shutdown

- Implements the `Drop` trait for `ThreadPool`
- Sends termination messages to all workers
- Waits for workers to finish their current tasks before shutting down

## Performance Considerations

- Fixed thread pool size to prevent resource exhaustion
- Efficient handling of concurrent requests
- Potential for future improvements (e.g., connection pooling, caching)


## Files

- `src/main.rs`: Main server logic
- `src/lib.rs`: Thread pool implementation
- `index.html`: Home page
- `404.html`: Not Found page

## Contributing

Contributions are welcome! Please submit a pull request or create an issue for any bugs or feature requests.

## License

[MIT License](LICENSE)