2008-01-13

SPNetKit:http/smtp/pop3/memcached 的客户端库

关键字: socket memcached client c++ http smtp pop3
SPNetKit 主要是一个常见应用层协议的客户端库,使用 C++ 实现,目前实现了 http,smtp,pop3,memcached 。
对于每个客户端都带有一个命令行的示范例子。

http/smtp/pop3 除了 TCP 实现之外,也能支持 SSL (基于 openssl)。
memcached client 支持了最新的 memcached 1.2.4 中新增加的 'append', 'prepend', 'gets', and 'cas' 命令。

除了这些客户端实现之外,还包括一个读取 ini 配置文件的类,base64 编码和解码类。

主页:http://code.google.com/p/spnetkit/
下载:http://spnetkit.googlecode.com/files/spnetkit-0.1.1.src.tar.gz
评论
iunknown 2008-02-17
发布了 0.2.0 版。这个版本主要是实现 memcached client 的多台服务器支持。
目前的实现采用了 consistent hashing 算法。先来看那一下配置文件:
[SocketPool]
ConnectTimeout = 6
SocketTimeout  = 6
MaxIdlePerEndPoint = 10
MaxIdleTime = 3600

[EndPointTable]
TableKeyMax = 1000
Server0 = "0-199"   127.0.0.1:11211
Server1 = "200-399" 127.0.0.1:11212
Server2 = "400-599" 127.0.0.1:11213
Server3 = "600-999" 127.0.0.1:11214


首先是配置一个 SocketPool 。MemcachedClient 采用非阻塞 socket 方式,因此可以控制连接和数据传输时的超时时间。
MaxIdlePerEndPoint 是针对每台服务器能够保留最多的空闲连接数。
MaxIdleTime 是当从 Pool 中取出一个 Socket 的时候,如果这个 Socket 的空闲时间已经超过了 MaxIdleTime ,那么将废弃不用。

consistent hashing 算法主要体现在 EndPointTable 这个配置节中。
TableKeyMax 设定了一个集合 KeyHashSet 。
在上面的配置中,设定的 KeyHashSet 为 [0-999]
所有的 Server 从这个 KeyHashSet 中,认领一部分。
Server0 认领了 [0-199] ,Server1 认领了 [200-399] ,如此类推。
当需要对一个 key 进行操作的时候,首先对这个 key 做一次 hash 运算得到一个 HashValue 。
通过 HashValue mod TableKeyMax 得到一个在 KeyHashSet 集合内的 KeyHash 值。
然后就可以根据各台 Server 认领的情况,找到对应的 Server 。

只要保证对 key 使用的 hash 算法不变,并且 TableKeyMax 不变,那么对于同一个 Key 就总是得到同一个 KeyHash 值。
当需要对 Server 做部分调整的时候,只影响调整的那部分 Server ,其他的 Server 将不受影响。
比如上面的 Server3 认领的 KeyHash 比其他的 Server 都多,那么将来如果要对 Server3 进行拆分,可以重新做如下的配置:

[EndPointTable]
TableKeyMax = 1000
Server0 = "0-199"   127.0.0.1:11211
Server1 = "200-399" 127.0.0.1:11212
Server2 = "400-599" 127.0.0.1:11213
Server3 = "600-799" 127.0.0.1:11214
Server4 = "800-999" 127.0.0.1:11215


在这这样拆分之后,原来保存在 Server0/Server1/Server2 上的数据都不受影响。
受影响的只是部分原来保存在 Server3 上的数据。
发表评论

您还没有登录,请登录后发表评论

iunknown
搜索本博客
我的相册
562c81ee-a4d4-351b-aa82-57a3972c22c6-thumb
vim
共 2 张
最近加入圈子
存档
最新评论