{"id":24407432,"url":"https://github.com/erio-harrison/tinyserver","last_synced_at":"2026-04-21T18:32:57.299Z","repository":{"id":248253706,"uuid":"825231973","full_name":"Erio-Harrison/TinyServer","owner":"Erio-Harrison","description":"Refactored the network library to C++11, implemented an HTTP server, and is developing a Rust version","archived":false,"fork":false,"pushed_at":"2024-12-22T00:41:56.000Z","size":169,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T05:05:58.550Z","etag":null,"topics":["cpp","rust","server"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Erio-Harrison.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-07T07:36:28.000Z","updated_at":"2024-12-22T00:42:00.000Z","dependencies_parsed_at":"2024-12-03T05:26:27.736Z","dependency_job_id":"fc8fe661-1ec8-418d-b834-a2975f4accc6","html_url":"https://github.com/Erio-Harrison/TinyServer","commit_stats":null,"previous_names":["erio-harrison/highperformancehub","erio-harrison/tinyserver","erio-harrison/tinynetworklibrary"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erio-Harrison%2FTinyServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erio-Harrison%2FTinyServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erio-Harrison%2FTinyServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erio-Harrison%2FTinyServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Erio-Harrison","download_url":"https://codeload.github.com/Erio-Harrison/TinyServer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243365637,"owners_count":20279215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","rust","server"],"created_at":"2025-01-20T05:06:01.022Z","updated_at":"2025-12-24T18:41:07.698Z","avatar_url":"https://github.com/Erio-Harrison.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TinyServer\n\n会开发cpp（已完成）和rust（部分完成，剩下的计划改为学生作业项目）两个版本，附上相应的tutorial\n\n[![Discord](https://img.shields.io/badge/Discord-Join%20Us-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/8jCKt9rTtN)\n\n# 项目特点\n\n- 底层使用 Epoll + LT 模式的 I/O 复用模型，并且结合非阻塞 I/O 实现主从 Reactor 模型\n\n- 数据库连接池可以动态管理连接数量，及时生成或销毁连接，保证连接池性能\n\n- 实现了内存池模块，更好管理小块内存空间，减少内存碎片\n\n- 利用有限状态机解析 HTTP 请求报文，支持解析GET和POST请求。访问服务器MySQL数据库实现用户注册、登录功能，可以请求服务器图片和视频文件\n\n- 基于自实现的双缓冲区实现异步日志，由后端线程负责定时向磁盘写入前端日志信息，避免数据落盘时阻塞网络服务\n\n# 并发模型\n\n![result](./asset/configure.png)\n\n# 编译运行\n\n编译:\n\n```bash\nmkdir build \u0026\u0026 cd build\ncmake ..\nmake\n```\n\n单元测试:\n\n```bash\n./unit_tests\n```\n\n性能测试:\n\n```bash\n./benchmark_tcp_server\n```\n\n运行HTTP服务器：\n\n我们可以在一个终端运行：\n\n```bash\n./http_server\n```\n\n再打开一个终端运行：\n\n```bash\ncurl http://127.0.0.1:8080/\n```\n\n这样会收到**Hello World!**的响应\n\n如果数据库环境也配置好了，可以运行：\n\n```bash\ncurl -X POST -d \"username=testuser\u0026password=testpass\" http://127.0.0.1:8080/register\n```\n\n这会发送一个包含 username 和 password 的 POST 请求来注册新用户。\n\n```bash\ncurl -X POST -d \"username=testuser\u0026password=testpass\" http://127.0.0.1:8080/login\n```\n这会发送一个 POST 请求来登录用户。\n\n\n# 优化和拓展思路（TODO LISTS）\n\n1. Reactor 模式： \n- 使用智能指针管理资源。\n- 添加错误处理和日志记录。\n- 实现定时器功能。\n- 支持写事件。\n- 使用线程池处理长时间运行的任务。\n\n2. 网络通信功能：\n\n- 实现 UDP 服务器（类似的方式，但使用 SOCK_DGRAM）。\n- 创建一个通用的 Protocol 类，用于处理不同的协议（如 HTTP、WebSocket 等）。\n- 实现客户端功能，允许主动建立连接和发送数据。\n- 添加 SSL/TLS 支持，提高安全性。\n- 实现更高级的错误处理和日志记录。\n\n3. 序列化与反序列化\n- 添加对复杂数据结构（如数组、映射等）的支持。\n- 实现版本控制机制，以支持向后兼容性。\n- 添加压缩功能以减少数据大小。\n- 实现对自定义类型的序列化支持。\n- 考虑使用更高效的编码方式，如变长整数编码。\n- 添加校验和或其他错误检测机制。\n\n4. 连接池和内存池\n\n- 为连接池添加空闲连接超时和定期健康检查。\n- 在内存池中实现不同大小的内存块分配。\n- 添加性能统计和监控功能。\n- 实现自动扩展和收缩池大小的策略。\n- 为内存池添加内存对齐支持，以优化缓存使用。\n\n5. 实现服务发现和负载均衡功能。\n\n- 实现更复杂的负载均衡策略，如加权轮询、最少连接数等。\n- 添加服务健康检查机制。\n- 实现动态服务发现，如集成 etcd 或 Consul。\n- 添加服务版本管理和兼容性检查。\n- 实现服务熔断和限流功能。\n- 添加缓存层以提高服务发现的性能。\n- 实现分布式一致性协议，如 Raft，以确保服务注册表的高可用性。\n\n6. 开发监控和日志系统。\n\n- 添加结构化日志支持，便于后续分析。\n- 实现日志轮转功能，防止日志文件过大。\n- 添加更多的指标类型，如百分位数、移动平均等。\n- 实现指标的定期导出功能，以便与外部监控系统集成。\n- 添加分布式追踪功能，以便在分布式系统中跟踪请求流程。\n- 添加警报功能，当某些指标超过阈值时发送通知。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferio-harrison%2Ftinyserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferio-harrison%2Ftinyserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferio-harrison%2Ftinyserver/lists"}