`
iunknown
  • 浏览: 404454 次
社区版块
存档分类
最新评论
文章列表
在 3 年前因为工作需要,搞过一段时间 jabberd 1.4 ,那时被jabberd 1.4 的代码搞的晕头转向。当时就在想要自己实现一个 jabber 服务器。在逐步实现了 spxml , spserver ,spdict 这 3 个库之后,实现 jabber 的时机终于到了。 http://code.google.com/p/sptalk/ 经过几天的编码之后,终于可以成功地用两个客户端互发信息了。目前实现了注册,登录,添加好友,互发信息功能。 由于对 jabber 协议不熟,所以这次的实现在事前没有认真地做系统的架构设计,目前是基于单机,单进程的方式来实现的。这次姑且作为一次快速原型 ...
jabber 的相关规范已经有人做了翻译 XMPP正式RFC标准 做个记录,:) 4.3. 流的安全 在XMPP 1.0中,当XML流开始握手时,TLS应该(SHOULD)按 第五章:TLS的使用 中的规定来使用,SASL必须(MUST)按第六章:SASL的使用中的规定来使用。尽管可能(MAY)存在某种共有的机制能够保证双向安全,但是“初始化流”(比如从初始化实体发给接收实体的流)和“应答流”(比如从接收实体发给初始化实体的流)还是必须(MUST)安全的分开。在流被验证之间,实体不应该(SHOULD NOT)尝试通过流发送XML节(第九章);就算它这样做了,对方的实体也不能(MUST N ...
在这里看到关于 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 模式其实也可以看成是 S ...
实现 spcached 的目的:不是与 memcached 进行竞争,只是为了测试。 最初想到要实现 spcached 的时候,是因为想对 spserver 这个框架做一个压力测试。当时想用作个简单的 http 服务器,然后用 apache 的 ab 工具进行测试。后来觉得如果做测试,最好能有一个对比,因此就想起了 memcached 来。并且刚好 memcached 和 spserver 都是基于 libevent 的。 memcached 是公认的高性能服务器,而且里面完全不涉及文件的 IO 操作,适合用来衡量以下几个方面:单线程 event-driven VS. 多线程,内存池 VS. ...
看到这个题目,估计很多人会问:为什么要再实现一个 web 服务器? 这里有几个原因: 1.这是一个 web 服务器框架,不是一个完整的 web 服务器。也就是说 SPWebServer 提供的是一套 API 和类库,可以方便地集成到现有的应用程序中。可以称 SPWebServer 为 embedded web server 。 2.有些时候,我们需要的不是一个功能强大完整的 web 服务器(例如 apache ),我们只是需要一个能提供最基本的 http 功能的服务器框架。比如要用 C/C++ 实现 XML-RPC,JSON-RPC 服务器端,或者为 jabberd 实现一个 http b ...
对着 MIT 的 《Introduction to Algorithms, Second Edition 》 看了一段时间,对里面的提到的几种字典数据结构算法很感兴趣,因此照着书上的描述做了一些实现。使用 C++ 实现了:BinarySearchTree, RedBlackTree, BalancedTree, SkipList, SortedArray 。 源代码下载: http://spdict.googlecode.com/files/spdict-0.2.src.tar.gz http://code.google.com/p/spdict/downloads/list 只实现了字典 ...
Page7 如果生活的要义在于追求幸福,那么,除却旅行,很少有别的行为能呈现这一追求过程中的热情和矛盾。 Page119 旅行的一个危险是,我们还没有积累和具备所需要的接受能力就迫不及待地去观光,而造成时机错误。
用 gdb debug c++ 程序,好多次遇到 Error while mapping shared library sections ,之前由于有其他的 debug 手段,因此就避开没有去追究是什么原因。今天遇到的问题没办法避开了,只能花时间来解决这个问题了。 很多时候为了做一些小实验或者尝试学习一套新的库,有关的动态链接库文件不会直接放到系统目录(诸如 /usr/lib)中,而只是在自己的 home 目录里面进行操作。并且通常为了方便,会把动态链接库文件和单元测试程序放到同一个目录中,同时把代表当前目录的 . 设置到 LD_LIBRARY_PATH 中,这样在很多情况下就不用额外设置 L ...
梅里雪山--日照金山全景图 行程表(点击链接可以查看相关的照片,或者查看所有图片) 日期 行程 交通 3.26 广州 -> 丽江 飞机 3.27 丽江 -> 徒步中虎跳 -> 奔子栏 梅里雪山四日团 ...
在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻: 半同步/半异步(half-sync/half-async): 许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在餐厅繁忙时留意给顾客安排桌位,为 ...
spserver 是一个实现了半同步/半异步(Half-Sync/Half-Async)和领导者/追随者(Leader/Follower) 模式的服务器框架,能够简化 TCP server 的开发工作。 spserver 使用 c++ 实现,目前实现了以下功能: 1.封装了 TCP server 中接受连接的功能; 2.使用非阻塞型I/O和事件驱动模型,由主线程负责处理所有 TCP 连接上的数据读取和发送,因此连接数不受线程数的限制; 3.主线程读取到的数据放入队列,由一个线程池处理实际的业务。 4.一个 http 服务器框架,即嵌入式 web 服务器(请参考: SPWebServer:一个基于 ...
《unix网络编程》 Page42 每一个 TCP 套接口有一个发送缓冲区,我们可以用 SO_SNDBUF 套接口选项来改变这一缓冲区的大小。当应用进程调用 write 时,内核从应用进程的缓冲区中 copy 所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设置。 Page161 客户可以设置 SO_LINGER 套接口选项,指定一个正的延滞时间。这种情况下,客户的 close 要直到它的数据和 FIN 已被 TCP 服务器 ...
要实现一个并发的网络服务器,一个流行的做法是使用 one thread per connection 。 具体采用的模型可能是 《unix网络编程》 (第二版,中文版) 27.12 TCP预先创建线程服务器程序,主线程统一 accept 。 使用这种模型,有以下的好处: ...
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 interfa ...
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 ...
Global site tag (gtag.js) - Google Analytics