即时网络通信应用程序中的设计问题

一、设计主要任务

开发像QQ和微信这样的即时网络聊天通信软件。


二、设计要求

(一)通信模式

客户端和服务端模式。


(二)支持的系统

1、桌面端
Windows7以上、MacOS。

2、移动端
安卓或者IOS。


(三)支持的使用量

每秒一万个客户端登录通信使用。


(四)支持的功能

1、私聊即时文本消息发送

2、语音通话

3、视频通话

4、文件发送

5、群聊即时通信

6、语音发送

7、即时记录保存和查看。


(五)运行要求

安全、可靠、流畅、可扩展。


三、具体实现需要解决下列问题

(一)使用什么编程语言?

1、服务端用C语言,或者Java。

2、安卓客户端用Java,苹果客户端用Swift。

3、桌面端win10用C++。


(二)服务端部署在什么操作系统中?

Linux系统中。


(三)客户端部署在什么系统中?

安卓系统、苹果系统。

桌面Win10系统。


(四)使用什么通信协议?

基于TCP的高级加密全双工通信协议。

支持多种加密和验证方式。


(五)怎么确保消息不丢失?

用TCP传输控制通信协议来保证可靠。


(六)历史消息如何保存?备份?查看?

1、把消息数据保存在远程服务器数据库文件里。

2、客户端用网络来调用查看,同时备份到本地。


(七)怎么实现全双工通信?

1、TCP本身支持全双工通信。

2、高层架构需要支持全双工
需要开启线程来监听接收,用另一个线程来发送。


(八)具体发送方法的逻辑?

1、 获取输入框的字节。

2、调用发送方法,组成协议单元,发送到网络里。


(九)通信状态怎么和界面同步更新?

1、 监听发送方正在打字,就发送一个数据包,通知接收方。

2、接收方收到后就对聊天框设置"对方正在输入"。


(十)怎么设计聊天界面?通信消息最长支持几天?

1、发送的消息用一个矩形放在聊天界面里。
收到消息就生成一个组件,添加到聊天界面里。

如果不够显示,一般是采用滑动框。

用户发送的消息和接收的消息都要显示在聊天框里,因此需要对聊天框对象添加一个独占锁。

2、通信消息最多保存一个月,超过一个月自动删除。

可以备份保存更长。


(十一)怎么确保能支持大量用户在线聊天?

1、服务器硬件配置高级。

2、采用服务器集群,分摊处理压力。

3、服务架构用多路复用,非阻塞读写。

4、网络采用高速带宽。

5、尽量用批量发送。
有些地方可以用缓存来提取。


(十二) 怎么实现私聊和群聊?

1、私聊需要建立一张关系表,维护双方的账号对应关系。

2、群聊需要建立一张群聊表。

3、每个用户的账号需要一个唯一主键。

4、每个用户登录后需要记录套接字,建立会话列表。

有了会话列表才能方便群聊遍历所有成员转发消息。

4、私聊和群聊的消息需要分开保存。

5、每条消息可以是服务器保存一份,本地压缩保存一份。


(十三)客户端和服务器断开连接后,如何重新连接?

第一种、手动调用方法重连。

第二种、用一个线程后台监听,自动重连。


(十四)怎么支持表情包?

1、表情包本质上是一个二进制序列。

2、主要难度是如何把图片也显示在聊天界面里。

3、需要参考浏览器的图片和文字混合编排。

实际上很多移动程序是内置浏览器,用网页显示界面。


(十五)客户端怎么找到服务端的IP地址?

客户端一般内置服务端的域名,采用DNS协议来获得服务端的IP。

或者一开始服务端固定IP地址,不采用域名。


四、总结

1、实现一个即时通信系统有一定难度。

2、需要搭建数据库,组织如何维护私聊和群聊。
需要关系表存放账号,通过账号找到套接字。
需要数据库存放聊天记录。

3、需要设计高级加密通信协议。

4、需要搭建聊天界面,需要实现输入法,界面图标,语音输入,录音调用等功能。

5、需要解决登录,会话管理,信息管理的问题。

6、语音通话,视频通话,语音发送,需要调用手机,电脑等终端的麦克风、扬声器、摄像头。

一般提供了软件接口来调用。
接口一般越简单越容易使用。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值