前言:
本篇文章从iOS开发者
的角度,介绍证券交易App
的一些技术选型、功能设计等方面的内容。涉及到与server的交互数据格式及定义、接口设计、功能设计等。
一、App编程语言及三方库
iOS
端采用原生开发,编程语言是Swift
。如果某些功能需要在双端同时实现可使用Flutter
。最近也参与了Flutter的跨平台开发,这篇文章简单介绍。
部分第三方库:
- 网络:
Alamofire
、Starscream
、SocketIO
- 数据解析:
HandyJSON
、SwiftProtobuf
、SwiftyJSON
- 布局:
SnapKit
- 网络图片:
Kingfisher
- 键盘输入:
IQKeyboardManagerSwift
- 缓存:
Track
- 弹框:
Toast-Swift
- 数据库:
WCDB.swift
二、网络部分
1、网络通信协议
常见的应用层通信协议有HTTP
、SMTP
、Web Socket
等,这里介绍当前项目使用到的两种:
HTTP(HyperText Transfer Protocol,超文本传输协议):
- 是一种网页(HTML)传输协议,适用于从万维网服务器传输超文本到本地浏览器的传送协议。
- 是一种
请求-响应
协议,客户端发送一个请求给服务器,然后服务器回送一个响应回来。这种通讯方式限制了只能有客户端发起通信,服务器不能主动给客户端发送数据。
Web Socket:
- 是一种在单个 TCP 连接上进行全双工通信的协议。目标就是在网页和服务器之间建立持久连接,然后进行双向数据传输。
- 比起 HTTP(HTTP 协议中,服务器不能主动向客户端推送信息),WebSocket 更适合于实时性要求较高的场景,例如网页聊天,股票行情,游戏等。
2、数据编码格式
网络通信中传递的是数据,那么如何组织这些数据编称作“编码”,常见的有XML和JSON这两种格式,在app开发中也几乎不会用XML这种格式了。另外一种是Google推出的Protocol Buffers(简称ProtoBuf或PB)。
JSON
(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 使用完全独立于语言的文本格式,采用 Key-Value 键值对的方式来存储和表示数据,常用于服务器和 Web 应用间的数据交换。
ProtoBuf
,全称 Protocol Buffers
,是 Google 公开的一种数据序列化协议
,用于数据结构的序列化,可以用于数据存储、通信协议等方面。相较于 JSON、XML 这些数据格式,ProtoBuf 更小、更快、也更简单。它使用二进制格式
,可以定义复杂的数据结构,还提供了众多语言的 API 接口,可用于网络通讯和数据存储。约定的数据结构能够被跨语言使用,比如 Server 使用 C++,Client 使用 Java,两者之间的通信,可以使用 ProtoBuf 来约定通信协议。
总体上,JSON
更简单易用,并且在WebView、Web Browser 这样的环境中使用更加便利。而 ProtoBuf
则适合于大规模的系统中,需要更高效或者更清晰的协议定义的地方。
我们当前讨论的证券交易App在查看行情的过程中需要接受大量的行情数据,同时对时效性有较高的要求。PB体积小(二进制格式)、效率高(编解码),也支持跨语言,同时Google也提供了完整的工具链(如将.proto格式的文件编译成目标语言如Swift文件),特别适合证券类高频率、大数据量的场景。
3、安全性
// TODO: –
三、主要的业务逻辑
1、与行情服务器建立WebSocket连接
WebSocket
是一个网络通信协议,提供了全双工(Full-duplex)通讯机制。在 WebSocket API
中,客户端(可以是web浏览器或app)和服务器只需要建立一次连接,就可以进行实时双向数据传输。这种协议的主要目标是在客户端和服务器之间实现实时通讯,同时也兼容了现有的 HTTP 协议。
建立WebSocket
连接需要知道服务器的ip地址
和端口号port
,其URI以ws://
或wss://
开头,如:"ws://172.16.10.207:11516"
,其中wss://
多了一层security layer
实现加密。
通常我们会将行情服务器信息ServerInfo
保存到本地,并提供更新接口。这样可以加速与行情服务器建立WebSocket连接的过程。如果本地未读取到则需要调用接口获取行情服务器信息,再建立连接、同时保存到本地。
2、数据的发送与接收
消息的格式: 容器 消息类型 + 消息体,
数据的发送
数据接收后的解析,传递给业务层
3、登录
检查登录状态
检查refreshtoken是否过期
刷新refreshtoken
单点登录
多点登录
4、在线状态
心跳
踢下线
四、启动后要做的一些事情
1、网络方面
网络状态检测 如果有网络的话,要建立websocket的连接 还要检查登录状态,refreshtoken等,同步用户数据