如何开发一个简单的聊天APP?
写服务端(整体设计思路):
服务端主要实现一下功能:
1、处理客户端登陆请求;
2、处理客户端设置请求(改密码、设置自身昵称、设置留言等);
3、处理客户端发送信息(包括文字、图片、表情)请求;
4、处理客户端发送文件请求(包括发送离线文件请求);
5、处理客户端聊天记录下载请求;
6、处理客户端查询用户列表、加好友等请求;
以上各个功能点围绕“网络通信”和“数据库维护”两个基本点展开:
任务处理逻辑:
使用windows完成端口+线程池技术实现网络通信,可以使用现成的网络库,当新的请求报文到达时,实例化对应的任务类,并投递到一个任务队列中;该任务队列使用信号量内核对象来维护,当有新的任务时,从线程池中激活一个线程去执行该任务。
业务逻辑细则:
1、当客户端接入,但超过n分钟未登陆,服务端主动断掉该客户端,已节约服务端资源;
2、当客户端登陆,在数据库中记录该用户的IP地址以及端口号,并记录登陆状态,表明该用户已经登陆,对于已经登陆的客户端,不允许重复登陆。当客户端注销、主动挂断、被动挂断等事件发生时,清除该用户的登陆状态。
3、当客户端发送消息传送请求时,先判断目的用户是否在线,如果在线,直接将消息转发到目标用户所在客户端IP/端口;否则,存入数据库,当目标用户登录时,择时进行推送。
4、当客户端发送文件请求时,如果双方均在线,则服务器首先协调双方客户端进行直连,如果直连成功,发送方直接给接收方发送文件,服务端不介入数据转发;如果直连不成功,或者接收方不在线,服务器要求客户端首先传送文件验证信息,目的是对要发送的目标文件进行查询,如果服务端已经存在相同的文件(文件名相同、大小相同、MD5校验相同),则通知客户端无需上传,同时在数据库对已存在的文件引用计数+1;如果服务端不存在该文件,则通知客户端发送文件并接收。
5、收到客户端下载聊天记录请求时,服务端从数据库中查询改用户的聊天记录,并分页传送给客户端。
写客户端:
任何报文请求遵循下列步骤:
发送请求报文---等待服务端处理结果---对结果进行处理。