即时聊天程序设计_第1页
即时聊天程序设计_第2页
即时聊天程序设计_第3页
即时聊天程序设计_第4页
即时聊天程序设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章第十一章基于基于LinuxLinux即时聊天程序设计即时聊天程序设计( (练习题,仅供参考练习题,仅供参考) )主讲人:欧忠良主讲人:欧忠良本章目标 作为Linux高级阶段一个练习,让学员从实践中掌握课程知识点。 实现即时聊天工具的设计思路 群聊的设计思路 私聊的设计思路 文件传输的实现思路 安全的共享内存管理方案功能需求 技术平台:运行平台:Linux开发工具:vi/gcc/gdb/makefile 软件功能客户端登陆群聊私聊文件传输*技术知识点准备 掌握Linux编程工具gcc/gdb/makefile 掌握Linux多进程技术的使用 掌握在System V下的IPC技术:信号、消

2、息队列、共享内存等等 掌握Linux下TCP SOCKET 编程技术程序框架客户端说明 tty进程从控制终端获取用户的输入,并以管道的形式传递给socket io进程进行发送 Socket IO进程负责读入管道数据即得到用户的输入,并通过socket按照自定义协议发送。负责读取socket,并分析和处理数据包,并显示。当发现网络中断的情况下,发送信号给tty进程,让其退出。服务器端说明(1) 监听进程以IO复用模型,创建服务器监听,等待客户端连入;当接收到客户端的连接请求后,添加客户信息clientinfo到共享内存区,并fork一个socket io进程负责数据端口的读写 Socket IO

3、进程负责从socket中读取数据包,并送到接收缓冲队列中mqRecv(其中消息结构messageType=getpid())负责从mqSend缓冲消息队列中,读取messagetype=getpid()的消息数据,并将数据包发送出去。服务器说明(2) 接收缓冲由消息队列实现,SOCKET IO进程读取到数据都送入这个队列,处理进程从该队列中读取数据包进行相应处理 发送缓冲由消息队列实现,处理进程处理后要发送给各客户端数据都送入这个队列,SOCKET IO进程从该队列中读取数据包按照自定义协议发送出去 处理进程根据包类型,进行相关的处理 客户信息列表以共享内存实现,详见共享内存管理方案和信息结构

4、自定义协议/数据包格式typedef struct data_packet unsigned char ucPackType; /0:群聊 1:私聊 2:登陆 3:在线列表包char acLoginName10;/送出数据包的客户端登录名char acDstName10;/数据包送达的客户端名char acData80;/聊天数据DATAPACKHEAD;/数据包说明,当ucPackType如下时:0:acDstName为空1:acDstName,acLoginName不能为空2: acDstName,acLoginName为空,acData为登录名3: 服务器端的应答包,acDstName,

5、acLoginName为空acData的格式:loginname1;loginname2;接收/发送缓冲消息结构typedef struct mymessageunsigned long int nMessageType;DATAPACK stDP;说明: 被送进发送缓冲的消息:nMessageType等于socket io进程ID,以便各个socket io进程从发送缓冲中得到各自要发送的数据客户端信息结构数据struct stClientInfopid_t nClientPid;/负责读写端口的进程 char acLoginName30;/客户端的登录名共享内存管理方案 Stack方案先进

6、后出 位图索引bitmap方案第一块内存块作为索引块索引块中每一位代表相应位置内存块的状态:“1”表示在用,“0”表示空闲 Hash管理方案详细介绍Hash管理方案struct stShmBlockint nBlockId; /块编号块编号void * pvBlockBp; /块基址块基址int nBlockSize; /块大小块大小sem_t semId; /控制该控制该block的信号量的信号量unsigned char status; /该该block的状态的状态void *apBlockMAX_SIZE共享内存管理封装(1) int SHM_create(int nMemSize);功

7、能:向Linux内核申请一片共享内存区参数:nMemSize共享内存大小返回值:0表示成功,且返回semid;0:写入成功的字节数;-1:写入失败共享内存管理封装(2) int SHM_read(shm_t shmid,void *pvUserData,int nDataLen);功能:从共享内存中读取一块数据到用户空间来参数:shmid共享内存块; pvUserData用来存放数据的区域; nDataLen读取长度返回值:0:读取的字节数;0:失败 void SHM_destroy(shm_t shmid);功能:释放共享内存区参数:shmid共享内存块返回值:无登陆流程群聊流程设计私聊设计

8、流程大并发网络通信程序 高并发解决方案 高负载时性能解决方案 系统稳定性 数据安全性 交易可靠性高并发/接入 1、借助Linux2.6内核实现的框架Epoll等 2、通过多进程技术突破Linux单进程内1024个文件描述符的限制高负载/性能 良好的程序框架进程改成线程来处理socket io线程可以根据并发io情况,启动相应数量的IO线程来读写处理线程可以根据接收缓冲的未处理数,来启动相应数量的处理线程来处理引入线程池的机制引入高性能的内存管理方案重新封装SOCKET,成库后以便于后面项目使用数据安全 网络安全 存储安全 传输安全将目前固定长度包改成可变长度数据包结构,引入包头包体机制,节约网络带宽使用加入数据包验证或关键字段加密的机制交易可靠性交易时要保证一应一答(有请求必有应答),应考虑如下的情况: T发送成功,但S未收到T发送成功,S收到,但E超时或未返回T发送成功,S收到,交易返回,但此时线路中断T发送成功,S收到,交易返回,应答成功,但T未收到.还需考虑的异常情况 异常流程1、服务器或客户端异常关闭2、网络线路中断,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论