2016年6月15日
摘要: 在之前的章节中,我们对服务端系统的设计实现原理进行了剖析,在这一章中,我们将对服务端框架进行实际运用,实现一款运行于内网环境的聊天系统。该聊天系统由客户端与服务器两部分组成,同时服务端通过数据库维护用户的账号信息。本章将重点介绍如何运用该服务端框架进行服务器业务逻辑开发。 聊天系统功能分析 本聊天系 阅读全文
posted @ 2016-06-15 01:36 第五大洋 阅读(7610) 评论(2) 推荐(0) 编辑
摘要: 生命周期介绍 每一个服务器系统的新连接从建立开始时,均会经历多个阶段。比如连接的建立,登录的验证,退出前的资源释放等。同时在具体的消息处理中,还会遇到不可识别的消息事件,或者消息处理时出现数据错误等。这些场景在每个连接的整个生命过程都可能会经历,而系统用户也会期望在某些场景中完成特定的操作。比如统计 阅读全文
posted @ 2016-06-15 01:29 第五大洋 阅读(1109) 评论(0) 推荐(0) 编辑
摘要: 在传统的服务器系统中,服务器仅针对接收到的客户端消息进行解析,并处理后回复响应。在该过程中服务器并不会主动判断客户端类型。但在现实中,往往存在多种类型的客户端设备,比如物联网下的智能家居系统,就存在智能电视、智能灯具、智能空调等,甚至一类客户端也可区分为网页端设备和移动端设备。不同类型的设备的消息处 阅读全文
posted @ 2016-06-15 01:22 第五大洋 阅读(1307) 评论(0) 推荐(0) 编辑
摘要: 这个系列把毕业论文的部分贴了出来,以作保存留念。整个系列分为三大部分,其中第一章到第三章是介绍服务器的系统层设计,设计思路参考了libevent和muduo等开源代码的实现;第四章到第六章是介绍服务器的服务层设计,设计思路参考了自己的Khala实现;第七章介绍了如何利用该服务器框架实现一款类似于QQ 阅读全文
posted @ 2016-06-15 01:02 第五大洋 阅读(5616) 评论(2) 推荐(2) 编辑
摘要: 前四章介绍了系统层的设计,从这一章开始进入服务层的设计。 连接断开 在常见的服务器场景中,客户端断开连接的方式为被动关闭。即作为客户端请求完服务器的服务后,选择主动关闭同服务器的连接。在服务器的角度看,服务器是客户端连接套接字read系统调用返回0,触发关闭逻辑,服务器本地是被动关闭连接的。 但是在 阅读全文
posted @ 2016-06-15 00:45 第五大洋 阅读(2627) 评论(0) 推荐(0) 编辑
摘要: 多线程探讨 如今大多数CPU都具有多个核心,为了最大程度的发挥多核处理器的效能,提高服务器的并发性,保证系统对于多线程的支持是十分必要的。我们在之前的设计都是基于单线程而言,在此章我们将对系统进行改进,在进一步提升系统性能的同时保证系统对于多线程的支持。 首先考虑这么几个问题,我们之前已经选定了基于 阅读全文
posted @ 2016-06-15 00:39 第五大洋 阅读(3320) 评论(0) 推荐(0) 编辑
摘要: 数据完整性讨论 我们已经选择了I/O复用模型作为系统底层I/O模型。但是我们并没有具体解决读写问题,即在我们的Reactor模式中,我们怎么进行读写操作,才能保证对于每个连接的发送或接收的数据是完整的,而且在某个连接进行读写时对整个系统的其他连接处理影响尽可能小。 在之前我们论述了为什么不能选择非阻 阅读全文
posted @ 2016-06-15 00:34 第五大洋 阅读(1547) 评论(0) 推荐(0) 编辑
摘要: I/O模型选择 在网络服务端编程中,一个常见的情景是服务器需要判断多个已连接套接字是否可读,如果某个套接字可读,则读取该套接字数据,并进行进一步处理。 在最常用的阻塞式I/O模型中,我们对每个连接套接字通过轮流read系统调用获取可读数据。如图3-1所示,read系统调用将会把该线程阻塞,直到数据报 阅读全文
posted @ 2016-06-15 00:14 第五大洋 阅读(7351) 评论(3) 推荐(2) 编辑