基于Redis实现HttpSession

6月忙着毕业,很是尴尬没能坚持写点博客,不过7月争取补上这些债务。

最近,又在继续写应用服务器了,算是有点进展,之后就可以陆续谈一些这方面的内容。对于实现应用服务器这一块,个人认为存在如下几个难点:

  • 并发模型的选择与实现
  • HTTP协议解析模块的实现,尤其是现在又多了个HTTP/2.0
  • 应用框架的实现,主要是路由模块、IoC的实现方式以及基本的DI等

要实现应用框架,就必须提供基本的概念抽象,如Request、Response和Session等。Request和Response充其量是体力活,而Session的实现则需要慎重考虑了。

本文就为大家带来HttpSession实现方面的内容,思想为主,代码为辅。

阅读剩余部分
动态链接库 for D

本文是动态链接库的第二版,前一版本只适用于Linux,但是这一版本添加了windows相关内容。

本文的内容是我在实现c2db的时候总结出来的。c2db是一个简单的ORM(实现中),它提供了一个接口层,下面有针对各种数据库独立实现的Driver,使用的时候我们只需要动态加载(而不是编译)就行了。针对这种需求,目前我们已经能够提供基本的跨平台实现,这里的平台主要是指posix和windows。

本文不再声称支持C/C++,因为个别原因,我们不得不使用core.runtime中已经跨平台的接口,因此细节部分不再是由我们来实现了。

阅读剩余部分
libmysqlclient 使用浅析

4月是颓废的一月,先是身体不适,呆坐了好几天,再是发现自己花了近20天写的库竟然已经有人实现了,连名字都一样,郁闷了好久,只能无奈改个名字(ddbc->c2db),然后改变项目的计划和侧重。

在开发c2db的时候,我们计划至少支持mysql、postgresql、sql server这几个dbms,自信哪里来?说白了,无非就是给那么dbms提供的C驱动套一层马甲罢了,纯粹是体力活,细心点就成。

那么为何不自己写这些驱动?理由很简单,性能和稳定性是在短期内无法苛求的。不过下一步c2db或许就要这么做了,因为我们发现似乎IO复用比连接池更好,而这要求我们自己编写驱动。当然,我最近也发现了一个叫mysql-native的库,就是用D实现的。

阅读剩余部分
Linux IO 概览

似乎最近说了比较多的IO,未来也可能有几篇文章与IO也有所关联,为了便于大家理解,我决定先草拟一篇介绍各种IO的文章,免得大家看到诸如阻塞式IO、非阻塞式IO、同步IO、异步IO、IO复用等概念后理不清思路。

请注意,本文仅涉及各类IO的概念以及简单的原理介绍,旨在帮助大家更好地区分和理解,具体如何使用这些IO不属于本文的内容。同时本文也是我个人对于各类IO学习的记录,有所疏漏是难以避免的,如果大家发现了问题,还请让我知道,我会第一时间修正。希望本文对大家有用所价值!

阅读剩余部分
D语言的协程——Fiber

假期里,我草草地啃了一遍《D程序设计语言》这本书,基本掌握了D的语法,期间也发现了一点问题,这里就当是废话简单提及一下。

首先是这本书,它绝对是本入门的好书,但总感觉比较啰嗦,可能是由于没有再版,有部分内容是有问题的,比如NVI,或许这也从侧面说明了D语法变动过于频繁。其次,关于标准库的介绍不足,并且对于GC语法也没有介绍,尤其是nogc,根本没有提及,或许作者就是希望我们用GC吧。

相比于C++的语法,D的语法中有更多的语法糖,尤其是数组部分,操作符重载部分。Actor并发模型的加入,也使并发编程变得更加令人心旷神怡,似乎有种Erlang的感觉。我个人认为D是一门“更像Java的C++”语言。

阅读剩余部分