网络聊天系统的设计与实现
3.3.1 系统架构模型
系统的整体结构如图所示,包含了主界面,注册模块,登陆模块,私聊模块,
群聊模块,首先要在注册模块完成注册,然后进入登陆模块登入才能进入主界面,主界面是一个选择可以选择进入私聊模块还是群聊模块。 3.3.2 功能模块设计
登陆模块,需要完成登陆界面,和登陆会话的维持。
注册模块,需要完成向数据库插入用户数据然后进行重复性检查。 私聊模块,构建两个套接字的连接方式,完成单独的连接。
群聊模块,构建一个广播室,所有套接字的发送都回转发到该广播室内的其他套接字当中。
3.3.3 系统通信设计
客户端主要通过套接字请求发送对方的ID给服务器,服务器在数据库当中确认该用户在线就把对应的用户地址返回给客户端,这个时候客户端就可以主动去连接对应的用户,用户在收到连接请求以后需要确认该请求来自服务器分发的任务,经过验证以后就可以去和客户端建立起套接字的连接。该过程的主体是客户端到服务器的请求,需要遵循预先定义好的协议进行请求,比如发送指令“get
12
网络聊天系统的设计与实现
userid a”给服务器,并且带上身份验证,也就是密码的加密信息给服务器,服务器进行验证以后就可以在数据库当中查找到对应的客户信心并且把a的信息返回给客户端,这个时候客户端就能够主动发起和a的连接,而不再需要经过服务器的确认了,其中有一个问题就是如果中途因为网络原因断线的话,需要重新请求服务器获取用户的在线状态,这样就能完成短线的重连。当然客户端的直接连接并不是完全没有防御的,必须对被动连接的源进行验证以后才能允许对应的套接字进行连接,比如运用私有协议,或者自定义的加密方式等等,这些手段在端到端上可以起到加密的作用。最后聊天的内容按照自定义的格式,以0xEEFF开头然后紧跟一个时间戳,表示消息发送的时间。 3.3.4 数据库设计
表3.1 user的结构
字段名 id password profile time
数据类型 自动编号 文本 文本 日期/时间
长度 50 256
主键否 是 否 否 否
描述 自动编号 密码 简介 活跃时间
表3.2 message的结构
字段名 id dst time
数据类型 文本 文本 日期/时间
长度
主键否 是 是 是
描述 发送者 接受者 发表时间
用户表是一个用户注册表,每有一个用户注册,表中就会添加一项,修改密码则对应的是字段的更新。另外消息表是一个消息历史记录的表,每次发送消息的时候都会更新这个表,首先id是指发送着的id,而dst指的是接受者的id,时间以发送方发出消息的时间为准,消息目前只支持文字,不支持其他格式例如图片的信息。
13
网络聊天系统的设计与实现
4 网络聊天系统详细设计及实现
4.1 服务器端设计与实现
服务端主要实现的是TCP连接的管理,当有一个消息到的时候需要转发给对应的客户端,这里定义了几个事件,首先是连接,断开,和发送,对于连接事件,确定对应的用户在线,对于断开事件则是把对应用户从在线状态的列表中去除,对于发送事件,确认发送方和接收方同时在线,则把消息发送到接收方。服务器会对逻辑进行处理。
图 4.1 消息的状态转换
图 4.2 服务器的主流程
服务器首先会处理请求,然后用户列表会进行更新,始终保持该列表和在线的用户同步,对于需要转发的请求,发送给对应的接收方,目前的设计是一个单点设计,所有的请求都要经过服务器的转发才能到达接收方,最后达到聊天的目的。
14
网络聊天系统的设计与实现
4.1.1 服务器等待连接进程/线程设计
图4.3 监听线程处理逻辑
首先,服务器开启监听线程,当有消息到达的时候就复制处理线程,然后重新进行监听,从而到达并发处理请求的目的。 服务器端(Server)是指在网络编程中被动等待连接的程序,服务器端一般实现程序的核心逻辑以及数据存储等核心功能。服务器端的编程步骤和客户端不同,是由四个步骤实现, 服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。 获得连接,当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。交换数据,服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送,这个和客户端的数据交换数序不同。其实,服务器端获得的连接和客户端连接是一样的,只是数据交换的步骤不同。当然,服务器端的数据交换也是可以多次进行的。在数据交换完成以后,关闭和客户端的连接。
这就是服务器端编程的模型,只是TCP方式是需要建立连接的,对于服务器端的压力比较大,而UDP是不需要建立连接的,对于服务器端的压力比较小罢了。
15
相关推荐: