2008-06-20

在 SPServer 中集成 IOCP 和 SSL

关键字: ssl spserver
打算把 Windows 的 SSPI 集成到 SPServer/IOCP 的框架中,这样可以减少 SPServer 对第三方库的依赖。但是看了一下 SSPI 之后,望而生畏啊。对比 openssl ,SSPI 接口相当于与其中的 BIO 接口,并且比 BIO 接口更难用。找了几个例子来看,每个的代码基本上都是又长又难看,太多的错误判断了。最后还是直接在 windows 上用 openssl 算了。看了 openssl 在 windows 下的编译步骤,决定都是放弃自己编译的想法。在网上找了个已经编译好的版本,然后把原来在 linux 下的 openssl 插件在 vc 下编译,经过一轮调试,看 ...
2008-06-11

Reasons for threading

关键字: threading
http://www.sagemath.org:9001/GlennTarbox/DsageNg There are 2 reasons for threading at high levels: 1. Blocking on code which you can't change 2. Can't figure out how to make it asynchronous
2008-06-01

集成 IOCP 到 Libevent

关键字: iocp libevent
集成 IOCP 到 Libevent 完整的代码在 http://spserver.googlecode.com/files/libevent-1.4.4-iocp-3.zip IOCP 是真正的异步 IO ,Libevent 提供的是一个 event-driven 的接口。 异步 IO 和 event-driven 的区别: 1.对于 event-driven,需要等待内核通知我们去启动一个IO操作,然后直接得到IO操作的结果 2.对于异步IO,我们可以随时无阻塞地启动 IO,然后由内核通知我们 IO 操作何时完成 要把 IOCP 集成到 libevent ,基本的思路是用 IOCP ...
2008-05-29

[zz]Emulate event driven i/o by IOCP

关键字: iocp event driven
原文 It may be possible to use IOCompletionPorts on Windows to implement apr_pollset_*. IOCPs aare very scalable but moving to IOCPs will require a complete rewrite of the apr_socket implementation on Windows. And there is the small matter of a simple technical issue that needs to be investigated. ...
IOCP 对于高并发的应用程序提供了良好的支持,使得开发高并发的应用程序的难度降低了很多。 IOCP 作为系统底层的 API ,保持了尽可能高的灵活性,对于很多复杂的情况,IOCP 也一样适用。 这种灵活性是一种双刃剑,对于复杂的情况,没有这种灵活性就没有办法完成工作。 但是对于简单的情况,这种灵活性就带来了额外的负担。 这里将要提到的这个服务器框架(spserver/iocp版),主要是针对以下的这几种典型的应用程序 1.echo/http 类型,server 不需要在多个 client 之间转发消息 2.chatroom 类型,server 在多个 client 之间转发消息 在使 ...
2008-05-17

mysql 6 网络层 IO 的设计

关键字: mysql 半同步半异步
mysql 6 中关于网络层 IO 的设计,在下面这个链接中讲了大体的思路 http://forge.mysql.com/worklog/task.php?id=441 首先提到了目前的设计,one_thread_per_connect 模型。 引用 ...... - A new thread is created to serve this socket. (Actually, with a thread cache, it might reuse an existing thtread.) ...... In short: The above design does not scal ...
2008-05-11

IOCP 的资源释放问题

关键字: iocp
在参考了一些资料,并且尝试了几次之后,也逐渐想到了一个用来安全释放 IOCP 资源的办法。 http://groups.google.com/group/dev4server/browse_thread/thread/29a91064931a628e 接着发现有人已经把这种方案描述的很清楚了 http://blog.codingnow.com/2007/07/robust.html#comment-12142 对大家的讨论不置可否,但是使用ID代替指针确实在某些方面是有益处的。 而某些时候我们无法使用智能指针。举个例子,完成端口中 GetQueuedCompletionStatus( ...
2008-01-04

Leader/Follower 进程池设计思路

关键字: 进程池 prefork
看了 apache 的分析文章之后,觉得里面的图非常好地描述了 apache 的结构。也尝试用 visio 画一下 spprocpool 的结构。 对图中各个部分的说明: 1. MasterServer 通过 Fork 创建 ProcessManager ,ProcessPool 作为 ProcessManager 在 MasterServer 中的存根 2. 在 ProcessPool 和 ProcessManager 存在一个 ManagerPipe 管道 3. 当 MasterServer 需要更多的子进程的时候,MasterServer 通过 ProcessPool 对象向 Proc ...
2007-12-07

Thrift:Facebook.com 的核心框架

关键字: facebook
http://developers.facebook.com/thrift/ Thrift is a software framework for scalable cross-language services development. It combines a powerful software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, and Ruby. Thrift was dev ...
2007-09-27

lkcd 的配置

关键字: lkcd 配置
suse linux 自带了 lkcd 安装包,安装之后,还有些配置项需要修改一下。 默认是使用 网络 方式,改成使用本地文件方式,记录一下 /etc/sysconfig/dump DUMP_ACTIVE="1" DUMPDEV="/dev/vmdump" DUMPDIR="/var/log/dump" DUMP_LEVEL="2" DUMP_COMPRESS="2" DUMP_FLAGS="0x80000000" DUMP_SAVE="1" PANIC_TIMEOUT="5" BOUNDS_LIMIT=10 KEXEC_IMAGE=/boot/vmlinuz KE ...
2007-08-11

手工测试 ssl 服务器的工具

关键字: telnet openssl
在为基于文本命令行协议的服务器(echo,smtp,pop,http一类的)增加 ssl 支持的时候,通常期望能够有一个 stelnet 工具,类似于平时用来测试文本命令行服务器的 telnet 工具,不过就要求 stelnet 能够支持 ssl 协议。一般来说,开发这类服务器,telnet 都是最基本的调试工具。有了这个 stelnet 工具之后,对于开发 ssl 的服务器有很大的帮助。 用 google search 了一下,发现有人准备做这个东西,但在 sf 上只有项目说明,还没有任何代码下载。接着就发现了下面这个链接 http://russell.rucus.net/blog/Gee ...
2007-07-19

fork with thread

关键字: fork thread
http://gceclub.sun.com.cn/solaris/819-7051-10.pdf Fork-One 安全问题和解决方案 除了通常关注的问题(如锁定共享数据)以外,当只有fork() 线程处于运行状态时,还应 根据fork 子进程的操作来处理库。问题在于子进程中的唯一线程可能会尝试获取由未复制 到子进程中的线程持有的锁定。 大多数程序不可能遇到此问题。从fork() 返回后,大多数程序都会调用子进程中的 exec()。但是,如果程序在调用exec() 之前必须在子进程中执行操作,或永远不会调用 exec(),则子进程可能会遇到死锁。每个库编写者都应提供安全的解决方案,尽管提供 ...
2007-06-19

关于 apache 的 prefork

关键字: prefork
http://blog.csdn.net/marcolu/archive/2004/08/02/59085.aspx 常用的应该就只有3个:worker|prefork|perchild 1. prefork:在功能上就是使用 Apache的运行方式,一个父进程,然后根据设置以及连接情况生成相应的子进程数。这种模式可靠性和健壮性都是最好的。但是在性能上,开销过大。达不到我们这些“吸血鬼”的要求了^_^。如果连接数过多的话,会导致我们无法远程登陆,一定要等到连接数下降后才能连接,这也是最让我头痛的事情。 2. worker:混合线程/进程的MPM。一个父进程,后面是带有线程的子进 ...
2007-05-20

half-sync/half-async,SEDA 和 生产者/消费者

关键字: 半同步半异步 SEDA
在这里看到关于 Mina based SMTP handler 的讨论,里面提到 mina 是 SEDA 的一个实现。 mina and SEDA It uses non-blocking IO and is an implementation of the staged event driven architecture (SEDA). SEDA makes it possible to have thousands of concurrent network connections. 看到之后,忽然想到,half-sync/half-async 模式其实也可以看成是 ...
用 gdb debug c++ 程序,好多次遇到 Error while mapping shared library sections ,之前由于有其他的 debug 手段,因此就避开没有去追究是什么原因。今天遇到的问题没办法避开了,只能花时间来解决这个问题了。 很多时候为了做一些小实验或者尝试学习一套新的库,有关的动态链接库文件不会直接放到系统目录(诸如 /usr/lib)中,而只是在自己的 home 目录里面进行操作。并且通常为了方便,会把动态链接库文件和单元测试程序放到同一个目录中,同时把代表当前目录的 . 设置到 LD_LIBRARY_PATH 中,这样在很多情况下就不用额外设 ...
2007-03-16

half-sync/half-async 和 Leader/Followers 模式的主要区别

关键字: half-sync/half-async Leader/Followers
在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻: 半同步/半异步(half-sync/half-async): 许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在餐厅繁忙时留意给顾客安排桌位,为等待就餐的顾客按序排队是必要的。领班由所有顾客“共享”,不能被任何特定顾客占用太多时间。当顾客在一张桌子入坐后,有一个侍应生专门为这张桌子服务。 领导者/追随者(Leader/Followers): 在日常生活中,领导者/追随者模式用于管理许多飞机场出租车候车台。在该用例中,出租车扮演“线程”角色,排在第一辆的出租车成为领导者,剩下的出租车成为追随者 ...
《unix网络编程》 Page42 每一个 TCP 套接口有一个发送缓冲区,我们可以用 SO_SNDBUF 套接口选项来改变这一缓冲区的大小。当应用进程调用 write 时,内核从应用进程的缓冲区中 copy 所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设置。 Page161 客户可以设置 SO_LINGER 套接口选项,指定一个正的延滞时间。这种情况下,客户的 close 要直到它的数据和 FIN 已被 TCP 服务 ...
2007-03-08

one thread per connection 的好处和弱点

关键字: 网络编程
要实现一个并发的网络服务器,一个流行的做法是使用 one thread per connection 。 具体采用的模型可能是 《unix网络编程》 (第二版,中文版) 27.12 TCP预先创建线程服务器程序,主线程统一 accept 。 使用这种模型,有以下的好处: 1.可以很方便地把这个模型实现为一个与具体应用无关的 framework, 《unix网络编程》书上的代码稍加整理就已经是一个可重用的 server framework 了。 Page646 和 Page647 上面的代码,需要针对不同的应用做修改的,仅仅是 thread_main 函数中,对 web_child 的调用。 ...
An Architecture for Highly Concurrent Well-Conditioned Internet Services.pdf SEDA 项目的相关论文 Page26 The use of helper processes in Flash and Harvest underscores the occasional need for an event-driven system to resort to blocking operations, either to reduce complexity or to make use of legacy interf ...
http://mail.jabber.org/pipermail/standards/2003-August/003950.html The only way you can truly do reliable messaging is if the client that receives the message sends back a confirmation that the message has been received and processed. it's still limited to server <-> client reliability, not e ...
http://monkeymail.org/archives/libevent-users/2006-October/000257.html Passing data between event loops in multithreaded apps http://www.weirdness.net/code/libevent
2006-12-27

libevent 注解

关键字: epoll
libevent - an event notification library http://www.monkey.org/~provos/libevent/ http://www.monkey.org/~provos/libevent/event3.html 《unix网络编程》 (第二版,中文版) 27.4 TCP 迭代服务器程序 6.8 TCP 回射服务器程序(修订版) 6.11 TCP 回射服务器程序(再修订版) Page 141 的代码去掉错误处理之后的大概流程如下 for( ; ; ) { nready = select( maxfd + 1, &rset, NUL ...
http://wiki.apache.org/directory/MinaTutorialInChinese 如果想实现复杂的如LDAP这样的协议怎么办呢?它似乎是一个恶梦,因为IO层没有帮助你分离‘message解析’和‘实际的业务逻辑(比如访问一个目录数据库)’。MINA提供了一个协议层来解决这个问题。协议层将ByteBuffer事件转换成高层的POJO事件: 就像前面提到的,你只需撰写面向POJO的message而不是ByteBuffer的。ProtocolEncoder 将message对象解释成ByteBuffers以便IO ...
http://www.artima.com/articles/io_design_patterns3.html System I/O can be blocking, or non-blocking synchronous, or non-blocking asynchronous [1, 2]. Blocking I/O means that the calling system does not return control to the caller until the operation is finished. Most important, the call ...
http://blog.csdn.net/umbrella1984/archive/2006/10/06/1322890.aspx epoll的使用 令人高兴的是,2.6内核的epoll比其2.5开发版本的/dev/epoll简洁了许多,所以,大部分情况下,强大的东西往往是简单的。唯一有点麻烦是epoll有2种工作方式:LT和ET。 LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你 的 ...
iunknown
搜索本博客
我的相册
562c81ee-a4d4-351b-aa82-57a3972c22c6-thumb
vim
共 2 张
最近加入圈子
存档
最新评论