Socket服务器整体架构概述
来源:互联网 发布:algorithm基础算法 编辑:程序博客网 时间:2024/06/05 10:21
Socket服务器主要用于提供高效、稳定的数据处理、消息转发等服务,它直接决定了前台应用程序的性能。我们先从整体上认识一下Socket服务器,Socket服务器从架构上一般分为:网络层、业务逻辑层、会话层、数据访问层,如图:
(一)
网络层主要用于侦听socket连接、创建socket、接受消息、发送消息、关闭连接。作为socket通信服务器,网络层的性能相当重要,所以我们在设计网络层时,要着重在以下几方面获得突破:最大连接数、最大并发数、秒处理消息数。如何突破呢?下面我为大家介绍几种网络层常用到的一些技术和技巧(具体实现,我将在博文中逐一具体阐述):
1)Buffer管理
2)双工通信
3)poolOfAcceptEventArgs
4)消息队列调度器
5)心跳扫描
6)粘包
7)多线程编程
(二)
网络层将解包后的消息包抛至业务逻辑层,业务逻辑层收到消息包后,解析消息类型,然后转入相应的处理流程处理。
网络层应提供发送消息的接口供业务逻辑层调用,因为网络层不会主动发送消息,发送消息的操作是由业务逻辑层来控制的,所以业务逻辑层应根据具体的业务应用,封装不同功能的发送消息的方法。
(三)
会话层主要用于记录在线用户信息,该层隶属于业务逻辑层。既然隶属于业务逻辑层,那为什么还要独立出来呢?这主要为以后分布式开发拓展用,试想,一台服务器最大能支持多少人同时在线?中国有多少人?如果1亿人同时在线,你一台服务器能支持得了吗?答案肯定是否定的,所以要分布式开发。分布式开发涉及到用户信息同步的问题,所以会话层就要独立出来了。
(四)
数据库执行效率是整个socket服务器的瓶颈?为什么呢?举个例子:假设我们的socket服务器的秒处理消息的条数为3000,每处理一条消息都会保存历史记录,那么,如果数据访问层不想拖网络层的后腿,那么他的执行sql语句的效率也必须达到每秒3000!如果socket服务器和数据库服务器部署在同一网段上,这个速度是没有问题的,但如果数据库服务器部署在外网呢?你的sql语句的执行效率能达到那么高吗?很困难!
再思考一个问题:如果网络层执行线程和数据库执行线程是同一个线程,那么网络层的处理必须等待数据库执行完毕后,才能进行!如果数据库执行效率比较慢,那对整个socket服务器将是一个毁灭性的打击。
那么怎样将数据访问层与网络层分离,让他们互不影响?如何提高数据库执行效率,让网络层的处理速度和数据访问层的处理速度达到一个平衡?答案:连接池+sql调度器+主从数据库。
Socket服务器的整体架构就为大家介绍到这里,下面我将会为大家具体阐述各个技术的实现
- Socket服务器整体架构概述
- Socket服务器整体架构概述
- Socket服务器整体架构概述
- Socket服务器整体架构概述
- Socket服务器整体架构概述
- c# Socket服务器整体架构概述
- Atlas的整体架构概述
- Android开发入门_Android整体架构概述
- NameNode 高可用整体架构概述
- LTE学习笔记--LTE整体架构和协议架构概述
- 服务器Socket概述与实例
- 服务器架构设计1------概述
- 【服务器架构】经典游戏服务器端架构概述
- Socket 客户端服务器模式 架构
- 整体架构
- 解密陌生人(3)服务器整体架构简要
- 客户端-服务器架构、Socket、TCP/UDP简介
- 【服务器架构】经典游戏服务器端架构概述(续)
- CI 获取数据库数据类型总是为STRING 的解决方案
- CCLabelTTF with fixed width and dynamic height solution
- Erlang性能的八个误区(Efficiency Guide)
- MYSQL DB SYN
- NAT穿透
- Socket服务器整体架构概述
- uva10422(Knights in FEN)-bfs+哈希(隐式图搜索)
- MYSQL LIMIT NOT WORK WHEN ESTIMATE NUMBER OF ROWS
- CCSPRITE:Load image from users documents folder
- menuconfig 缺失 MTD partitioning support 解决办法
- ORDER BY RAND的一种比较好的方案][CI]
- Linux系统编程使用O_CREAT|O_CREATEXCL标志创建文件
- iOS crash only when NOT running via XCode
- 黑马程序员-----字符流基本演示(黑马视频)