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

下载本文档

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

文档简介

第十一章基于Linux即时聊天程序设计(练习题,仅供参考),本章目标,作为Linux高级阶段一个练习,让学员从实践中掌握课程知识点。实现即时聊天工具的设计思路群聊的设计思路私聊的设计思路文件传输的实现思路安全的共享内存管理方案,功能需求,技术平台:运行平台:Linux开发工具:vi/gcc/gdb/makefile软件功能客户端登陆群聊私聊文件传输*,技术知识点准备,掌握Linux编程工具gcc/gdb/makefile掌握Linux多进程技术的使用掌握在SystemV下的IPC技术:信号、消息队列、共享内存等等掌握Linux下TCPSOCKET编程技术,程序框架,客户端说明,tty进程从控制终端获取用户的输入,并以管道的形式传递给socketio进程进行发送SocketIO进程负责读入管道数据即得到用户的输入,并通过socket按照自定义协议发送。负责读取socket,并分析和处理数据包,并显示。当发现网络中断的情况下,发送信号给tty进程,让其退出。,服务器端说明(1),监听进程以IO复用模型,创建服务器监听,等待客户端连入;当接收到客户端的连接请求后,添加客户信息clientinfo到共享内存区,并fork一个socketio进程负责数据端口的读写SocketIO进程负责从socket中读取数据包,并送到接收缓冲队列中mqRecv(其中消息结构messageType=getpid())负责从mqSend缓冲消息队列中,读取messagetype=getpid()的消息数据,并将数据包发送出去。,服务器说明(2),接收缓冲由消息队列实现,SOCKETIO进程读取到数据都送入这个队列,处理进程从该队列中读取数据包进行相应处理发送缓冲由消息队列实现,处理进程处理后要发送给各客户端数据都送入这个队列,SOCKETIO进程从该队列中读取数据包按照自定义协议发送出去处理进程根据包类型,进行相关的处理客户信息列表以共享内存实现,详见共享内存管理方案和信息结构,自定义协议/数据包格式,typedefstructdata_packetunsignedcharucPackType;/0:群聊1:私聊2:登陆3:在线列表包characLoginName10;/送出数据包的客户端登录名characDstName10;/数据包送达的客户端名characData80;/聊天数据DATAPACKHEAD;/数据包说明,当ucPackType如下时:0:acDstName为空1:acDstName,acLoginName不能为空2:acDstName,acLoginName为空,acData为登录名3:服务器端的应答包,acDstName,acLoginName为空acData的格式:loginname1;loginname2;,接收/发送缓冲消息结构,typedefstructmymessageunsignedlongintnMessageType;DATAPACKstDP;说明:被送进发送缓冲的消息:nMessageType等于socketio进程ID,以便各个socketio进程从发送缓冲中得到各自要发送的数据,客户端信息结构数据,structstClientInfopid_tnClientPid;/负责读写端口的进程characLoginName30;/客户端的登录名,共享内存管理方案,Stack方案先进后出位图索引bitmap方案第一块内存块作为索引块索引块中每一位代表相应位置内存块的状态:“1”表示在用,“0”表示空闲Hash管理方案详细介绍,注意:多进程访问同步,Hash管理方案,structstShmBlockintnBlockId;/块编号void*pvBlockBp;/块基址intnBlockSize;/块大小sem_tsemId;/控制该block的信号量unsignedcharstatus;/该block的状态,void*apBlockMAX_SIZE,共享内存管理封装(1),intSHM_create(intnMemSize);功能:向Linux内核申请一片共享内存区参数:nMemSize共享内存大小返回值:0表示成功,且返回semid;0:写入成功的字节数;-1:写入失败,共享内存管理封装(2),intSHM_read(shm_tshmid,void*pvUserData,intnDataLen);功能:从共享内存中读取一块数据到用户空间来参数:shmid共享内存块;pvUserData用来存放数据的区域;nDataLen读取长度返回值:0:读取的字节数;0:失败voidSHM_destroy(shm_tshmid);功能:释放共享内存区参数:shmid共享内存块返回值:无,登陆流程,群聊流程设计,私聊设计流程,大并发网络通信程序,高并发解决方案高负载时性能解决方案系统稳定性数据安全性交易可靠性,高并发/接入,1、借助Linux2.6内核实现的框架Epoll等2、通过多进程技术突破Linux单进程内1024个文件描述符的限制,高负载/性能,良好的程序框架进程改成线程来处理socketio线程可以根据并发io情况,启动相应数量的IO线程来读写处理线程可以根据接收缓冲的未处理数,来启动相应数量的处理线程来处理引入线程池的机制引入高性能的内存管理方案重新封装SOCKET,成库后以便于后面项目使用,数据安全,网络安全存储安全传输安全将目前固定长度包改成可变长度数据包结构,引入包头包体机制,节约网络带宽使用加入数据包验证或关键字段加密的机制,交易可靠性,交易时要保证一应一答(有请求必有应答),应考虑如下的情况:T发送成功,但S未收到T发送成功,S收到,但E超时或未返回T发送成功,S收到,交易返回,但此时线路中断T发送成功,S收到,交易返回,应答成功,但T未收到.,还需考虑的异常情况,异

温馨提示

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

评论

0/150

提交评论