随笔分类 -  网络编程

摘要:一.软件介绍(apache lighttpd nginx)1. lighttpdLighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。Lighttpd使用fastcgi方式运行php,它会使用很少的PHP进程响应很大的并发量。Fastcgi的优点在于:· 从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可 阅读全文
posted @ 2012-09-04 13:16 vivianC 阅读(499) 评论(0) 推荐(0)
摘要:我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消 息。测试准备的有些仓促,我并没有修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软件,然后就让它们做这些最简单的收发信息的操作。所以 这是一次真正的“开箱即装即用”的性能表现。我完全理解,这对那些初始配置十分保守的消息队列产品将 阅读全文
posted @ 2012-04-24 20:48 vivianC 阅读(264) 评论(0) 推荐(0)
摘要:以下内容是从网上各处简单整理而来,因为前段时间自己一直在研究Thrift,把研究的一点资料分享给需要的同行中人!第一节RPC技术及实现简介首先思考一下分布式系统中的RPC (Remote Procedure Call)问题,一个完整的RPC模块需要可以分为三个层次· 服务层(service):RPC接口定义与实现· 协议层(protocol):RPC报文格式和数据编码格式· 传输层(transport):实现底层的通信(如socket)以及系统相关的功能(如事件循环、多线程)在实际的大型分布式系统中,不同的服务往往会使用不同的语言来实现,所以一般的RPC系统会提供 阅读全文
posted @ 2012-04-24 17:57 vivianC 阅读(523) 评论(0) 推荐(0)
摘要:ZeroMQ的想法和初衷是好的,让你用串行的思路写异步的消息处理程序。并且在此基础之上提炼出了常见的消息模式,让你写起程序来更加省心。库替你完成了异步消息发送、故障恢复、甚至连磁盘的buffer都提供了。不可谓不全面。同时提供的接口非常简洁。但是,用很少的接口封装复杂的逻辑通常的结果就是:当你的业务场景跟库的设计者设想的业务场景一样时,你回很爽。但当业务有差别,或者对细节有要求时,你会很惨。用trick能解决已经算是较好的情况了。欺骗性质的封装。当你zmq_connect返回成功的时候,不要高兴,这并不意味着你真的创建好链接了,因为即使你连一个根本没人监听的地址也会成功,为什么呢,因为Zero 阅读全文
posted @ 2012-04-24 17:17 vivianC 阅读(785) 评论(0) 推荐(0)
摘要:ZeroMQ是一个很有个性的项目,它原来是定位为“史上最快消息队列”,所以名字里面有“MQ”两个字母,但是后来逐渐演变发展,慢慢淡化了消息队列的身影,改称为消息内核,或者消息层了。从网络通信的角度看,它处于会话层之上,应用层之下,有了它,你甚至不需要自己写一行的socket函数调用就能完成复杂的网络通信工作。借用官方的例子:客户端(发送N个“Hello”消息到服务端,接受回应):12345678910111213141516171819202122232425262728293031323334353637//// Hello World client// Connects REQ socke 阅读全文
posted @ 2012-04-24 17:15 vivianC 阅读(554) 评论(0) 推荐(0)
摘要:在需要并行化处理数据的时候,采用消息队列通讯的方式来协作,比采用共享状态的方式要好的多。Erlang ,Go 都使用这一手段来让并行任务之间协同工作。最近读完了ZeroMQ的Guide。写的很不错。前几年一直有做类似的工作,但是自己总结的不好。而 ZeroMQ 把消息通讯方面的模式总结的很不错。ZeroMQ 并不是一个对 socket 的封装,不能用它去实现已有的网络协议。它有自己的模式,不同于更底层的点对点通讯模式。它有比 tcp 协议更高一级的协议。(当然 ZeroMQ 不一定基于 TCP 协议,它也可以用于进程间和进程内通讯。)它改变了通讯都基于一对一的连接这个假设。ZeroMQ 把通讯 阅读全文
posted @ 2012-04-24 17:10 vivianC 阅读(374) 评论(0) 推荐(0)
摘要:1.read系统调用测试程序:客户端向服务器端(tcp)发送一个”hello”字符串,服务器端读取并echo到客户端。服务器端主要代码:char buf[4096];int r = tcp_readn(sock, buf, 4096);int w = tcp_writen(sock, buf, r);客户端主要代码:char buf[4096];int w = tcp_writen(sock, “hello”, 5);int r = tcp_readn(sock, buf, 4096);问题描述:客户端write调用成功,服务器端阻塞在tcp_readn上,tcp_readn的实现如下所示:i 阅读全文
posted @ 2012-01-10 18:43 vivianC 阅读(319) 评论(0) 推荐(0)