1、企业即时通讯系统 后台服务器架构设计,在本次毕业设计中,我主要负责CS通讯系统中server端的设计,在这次PPT的演示中,我希望通过对服务端主要类的介绍以及其内部工作流程,向各位老师展示我所负责和完成的工作。多谢各位老师的指导帮助。,Server类 SwitchThread类和ServerThread类 InputThread类和OutputThread类,Server类中主要方法: run()方法 创建定时更新数据库的定时器Timer; 接受客户端的连接请求:CSocket=welcome.accept();/首次与客户端的传输层通信进行用户验证,将CSocket作为参数传给Certifi
2、ng(Socket Csocket); 准备接收客户端的认证信息。 Certifing(Socket Csocket)方法 由Socket Csocket创建到客户端的流准备读写 等待客户端的输入先接收客户端的控制字符(单个字符)(L或者R),分别表示用户登陆或者注册接着接收客户信息UserInfo对象-客户端将个人信息(主要用到的是用户名和密码)封装成的对象。如果L则进行用户登陆验证如果R则先检验用户名是否已经存在,若不存在,创建对应的UserInfo对象,写入数据库和AllUsers,SwitchThread类 SwitchThread完成的任务(后台运行): 实际上是个转发器,保存了所有
3、的ServerThread对象 转发即时通讯信息 向各客户端发布公告 通知各客户端有新用户上下线,使各客户端与服务器端同步 四个队列,一个哈希表 ONingQueue;/在线用户 OFFingQueue;/离线用户 RealTimeMsgQueue;/即时信息 NewPubMsgQueue;/新发送的公告 CSThreads;/所有在线用户的服务对象 SwitchThread主要方法: OffUserReceiver OnUserReceiver PubMsgReceiver RealTimeMsgReceiver run() /负责将4个队列中的信息每500ms转发给CSThreads中的所
4、有的ServerThread对象,ServerThread类 负责与客户端一对一通信的对象 ServerThread完成的任务(后台运行): 每一个客户端连接(登陆/注册成功)进来,服务器端就会生成一个ServerThread对象。Server对象就会把与客户端对应的Socket传递进来,并由该对象的内部类InputThread、OutputThread负责具体的与客户端的通信。 接收Server创建的Socket和与之对应的流。 为InputThread、OutputThread与Server、SwitchThread维护通信信息队列。负责这四个对象的协调。,InputThread类和Out
5、putThread类 ServerThread的内部类 InputThread 接收客户端Client的send()方法发送来的即时信息(控制标志F) 接收客户端Client的send()方法发送来的留言(控制标志M) 接收客户端Client的logoff()方法发送来的下线提示(控制标志D) OutputThread 向Client的run()方法-线程体发送: 服务器端新增公告(控制标志C) 通知有刚上线用户-即在该线程服务对方的用户之后上线(控制标志U) 通知有刚下线用户-即在该线程服务对方的用户上线后下线(控制标志D) 到该线程服务对方的即时信息(控制标志F) InputThread接
6、收到当前服务用户下线提示(控制标志D) 后,回复(控制标志G),Server内部工作流程,Server,SwitchThread,ServerThread.i,InputThread,OutputThread,I/O 分界面,启动服务器并读入数据库中的内容,启动工作线程,Client.j,启动数据库更新定时器定时调用DBUpdate(),若是注册用户则立即插入数据库,connect(),login(),run(),send(),logoff(),点击发布按钮后,SwitchThread将其四个队列中的信息转发到恰当的ServerThread,将新创建的ServerThread添加到CSThread,直接从队列中逐个取出信息发送到客户端,向在线用户即时信息,向不在线用户发送留言,用户退出,将刚退出的ServerThread移除,答复客户端退出,负责与客户端一对一通讯的对象,致谢,感谢软件学院的全体老师 感谢我的指导老师和团队所有成员 敬请答辩组老师指导和批评,