标签归档:服务器

网络编程–基于libev的EchoServer编程示例

目前网上很多libev的EchoServer都非常简洁,在对客户端读写事件时的处理都不够明晰,现在简单介绍一个对一个客户端连接在进行异步读写时的处理,并给出一个可以执行的代码版本。 对于多进程/多线程编程框架还需要进行扩展,通常由主进程或线程启动异步事件驱动器进行网络监听,将客户端的连接放到业务处理线程自身的异步事件驱动器中,然后对每个客户端再进行业务处理,为避免客户端的慢操作或是耗时操作,业务线程还可以引入协程,对这些耗时操作使用协程处理,避免业务线程的阻塞。 1. 每个连接应该是一个独立的结构体,包含事件循环驱动器、事件读写监视器,以及此连接上面的读写缓存、用户数据等 […]

[阅读全文...]

网络服务器-解决服务器大量TIME_WAIT而无法访问的方法

前段时间我在进行线上项目压力测试的时候,遇到了一个吞吐量的性能问题,当时我的Server和Client之间的通信协议采用了Json Over HTTP的方式(并且在同一个机器上面,其实应该是出现在Client的那个机器上),而且由于Client的实现原因,没有任何KeepAlive机制,同时必须有大量的请求,这样就造成一个问题,客户端的请求端口会迅速被使用完成,然后系统会有大量的TIME_WAIT,整个系统再也分配不出新的端口给任何程序(包括Client)使用,任何新创建连接时,都会报错,即:”Cannot assign requested address”,经 […]

[阅读全文...]

网络服务器-Loopback (Internet Sockets) VS UNIX Domain Sockets

在本机的进程间通信中,TCP和UNIX域套接字是两种比较简单方便的通信方式,TCP基本以回路地址形式表现,回路地址在本机通信上还是要比UNIX域套接字多了封包/解包/校验和/序列确认等操作 那么对于这两种方式的性能比较可以参考以下文章: http://bhavin.directi.com/unix-domain-sockets-vs-tcp-sockets/ http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html 同时做了一个简单的对比测试,虚拟机上(1CPU、256M […]

[阅读全文...]

邮件服务器-POP3服务器邮件索引/UIDL简单、高效的缓存方案

对于POP3服务器来说,最重要的衡量标准就是单台服务器所能承担的用户服务,这其中会涉及用户并发数、网络带宽流量等因素影响。 POP3服务目前在国内的企业邮箱应用里面是一个比较普及的功能,毕竟outlook、foxmail客户端做的确实很不错,而且这么多年的用户习惯,还是习惯把邮件拉到自己的本地办公电脑上来操作和查找,当然,为了在多地点的访问,用户又习惯在服务器保留副本,至少在出差或是家里还是可以通过webmail来处理一下邮件,毕竟不能总是背着办公电脑跑,其实这就带来一个问题,用户的 UIDL 列表会很多,在10W这级别算是正常(关于降低 UIDL 列表,也有两种方案,以后 […]

[阅读全文...]