使用Swift的iOS中的Websocket
WebSocket允许极其快速的双向网络通信,这使您可以更快,更频繁地发送和接收更新,更不用说安全了。 WebSocket是一种使用套接字的通信协议,可通过单个TCP连接提供双工通信。 它由IETF于2011年标准化,是与HTTP不同的协议。
WebSockets广泛用于聊天应用程序,流实时通知和股票价格中。
Websocket生命周期
与服务器握手
握手应用程序是WebSockets中的Web部件。 这是从HTTP到WebSocket的桥梁。 客户端向服务器发送一个非常标准的HTTP GET请求:
GET / chat HTTP / 1.1
主持人:example.com:8000
升级:websocket
连接:升级
Sec-WebSocket-密钥:dGhlIHNhbXBsZSBub25jZQ ==
安全WebSocket版本:1
这里最有趣的是`Sec-WebSocket-Key`,出于安全原因,它是根据WebSocket标准生成的。
服务器验证请求,如果一切正常,则发送回HTTP响应:
HTTP / 1.1 101交换协议
升级:websocket
连接:升级
Sec-WebSocket-接受:s3pPLMBiTxaQ9kYGzzhZRbK + xOo =
交流信息
服务器或客户端可以随时发送遵循以下特定格式的数据:
我不会详细介绍每个部分,但是您可以在标准中找到更多信息。
乒乓球
客户端或服务器在任何时候都可以发送ping,而另一方必须发送回pong。
闭幕
任何一方都可以通过发送指定的控制序列来关闭连接。
在iOS中实现WebSockets
在iOS,macOS,tvOS或watchOS中实现WebSocket并非易事。 新的Network.framework可以简化此操作,但是您仍然需要处理基础任务,例如升级连接和设置WebSocket框架。
红蜘蛛
Swift WebSocket客户端库Startscream简化了所有繁重的任务。 安装该库并将其导入任何Swift文件中。
进口红蜘蛛
建立连接
之后,创建一个连接并设置委托。
套接字= WebSocket(URL:URL(字符串:“ ws:echo.websocket.org”)!)
socket.delegate =自我
设置代表团
然后,我们需要设置委托方法。 Starscream还提供了使用闭包的选项,但在此不做介绍。
- websocketDidConnect
- websocketDidDisconnect
- websocketDidReceiveMessage
- websocketDidReceiveData
- websocketDidReceivePong(可选)
一旦完成,就可以开始连接了。 库在后台完成了握手和升级连接。
socket.connect();
传送资料
有几种发送数据的方法:
- 二元
- 串
- ping
- ong
最简单的方法是只发送一个字符串:
socket.write(string:“嗨,服务器!”)
断开连接
在任何时候,我们都可以检查连接是否仍处于打开状态,如果不再需要它,则可以将其关闭。
如果socket.isConnected {
socket.disconnect()
}
TL; DR
WebSocket不是iOS,macOS,tvOS和watchOS中的一等公民。 实施,使用和理解它可能会让人不知所措,但是Swift库Starscream可以帮助您完成所有这些任务。
链接
- WebSocket协议
- 编写WebSocket服务器
- 红蜘蛛Swift WebSocket库
- Swift中的Websocket Frame实现
- Web套接字101
- WebSocket安全
最初发表于 kristaps.me
- ALAMOFIRE:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
- iOS – 从底部填充UIBezierpath的animation
- 导航栏教程
- 为什么UIRefreshControl跳跃?
- 如何从UIAlertView迁移(在iOS8中不推荐)
- 与CLGeocoder重复地理编码后,kCLErrorDomain错误2
- 默认情况下启用Xcode的“键入时检查拼写”选项
- video作为iOS背景最有效的方法
- ios6和ios7之间不同的垂直alignment字体