大家好,最近小弟在学习 Socket,受到 Capriccio 和 C10k 启发,又刚好遇到 Zaver 作者写的这篇博文,就想着看看能不能仿照 Zaver 然后改用协程(?)为我自己的单核服务器写一个单线程的 HTTP 服务器程序来练练手,从汇编实现到直接用库都试了一下,后来发现如果限制在一个线程的话,协程的意义也不大,于是就直接放弃了使用协程的想法,只是把书上(主要是 Linux/UNIX 系统编程手册)推荐的一些调度方法实现了一下,希望能通过尽量减少 blocking 操作来达到差不多的效果,然后就有了这个非常基础、简单的服务器,cherry。
其实如果说 HTTP 服务器实现的话,GitHub 上真是多如牛毛,cherry 也没什么太多值得分享的地方,按理说就该放在一边吃灰的,但我转念一想,正是因为 cherry 没有什么太高深的地方,是一个仅仅以书本知识为基础写出来的,刚刚好能运行的 HTTP 服务器,某些层面上来说,如果有谁也恰好在看 CS:APP,编程手册,UNIX 网络编程之类的书的话,cherry 如今正好就像是一个课后作业,于是就抱着「可能有人想看一下我的作业」的心态就在这里分享出来了,哈哈。日后的话,我可能更多地会把这个项目当成一个模板,所以也不会在 cherry 里添加太复杂的内容,只在原有的基础上实现一些比较容易的想法,比如换一下数据结构,支持一下配置文档或者 kqueue 之类,如果有兴趣(<del>找 bug</del>)的话可以移步 README ~
GitHub 地址: https://github.com/ahhzee/cherry
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.