# ?版權(quán)聲明:本文為Andy_wangpeng原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載报亩。
#如需轉(zhuǎn)載請(qǐng)注明版權(quán)
每當(dāng)小編再開(kāi)發(fā)中遇到了困難,在網(wǎng)上搜井氢,簡(jiǎn)直是垃圾堆里找金子弦追。國(guó)內(nèi)網(wǎng)站真的全不可靠,最后翻墻去國(guó)外網(wǎng)站尋找花竞,才可以找到劲件。找到了寫(xiě)websocket文章,同事找到了集成的框架文件左胞,一個(gè)叫Starscream
的第三方庫(kù)寇仓,附上github地址『去看下->Starscream』
最近,開(kāi)發(fā)中要使用WebSockrt烤宙,做到實(shí)時(shí)監(jiān)控消息遍烦,需要用的技術(shù)是websocket。
什么原理什么的躺枕。我就不說(shuō)了服猪,自己百度下也行,是在不行給你們幾個(gè)鏈接自己去看吧
1.先認(rèn)識(shí)什么是WebSocket
WebSocket protocol 是HTML5一種新的協(xié)議拐云。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)罢猪。
在 WebSocket API,瀏覽器和服務(wù)器只需要要做一個(gè)握手的動(dòng)作叉瘩,然后膳帕,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
2.集成WebSocket?
小編的是Xcode8.0 Swift3.0,在這里小編采用cocoaPod下載的
1.cocopod下載代碼: (projectName ):他是你工程更的名字危彩,記得更換不要寫(xiě)錯(cuò).
platform :ios, '8.0'
use_frameworks!
def pods
pod 'Starscream', :git => 'https://github.com/daltoniam/Starscream.git', :branch => 'swift3'
end
target 'projectName' do
pods
end
`##注意:更新完了會(huì)報(bào)錯(cuò)用命令轉(zhuǎn)下即可攒磨,不懂的再問(wèn)我`
2. 下載完成后,導(dǎo)入 import Starscream
首先寫(xiě)一個(gè)單例汤徽,實(shí)現(xiàn)一些方法
//
// Created by 王鵬 on 16/9/22.
// Copyright ? 2016年 鼎商動(dòng)力. All rights reserved.
//
import UIKit
import Starscream
@objc public protocol DSWebSocketDelegate: NSObjectProtocol{
/**websocket 連接成功*/
optional func websocketDidConnect(sock: DSWebSocket)
/**websocket 連接失敗*/
optional func websocketDidDisconnect(socket: DSWebSocket, error: NSError?)
/**websocket 接受文字信息*/
func websocketDidReceiveMessage(socket: DSWebSocket, text: String)
/ **websocket 接受二進(jìn)制信息*/
optional func websocketDidReceiveData(socket: DSWebSocket, data: NSData)
}
public class DSWebSocket: NSObject,WebSocketDelegate {
var socket:WebSocket!
weak var webSocketDelegate: DSWebSocketDelegate?
//單例
class func sharedInstance() -> DSWebSocket
{
return manger
}
static let manger: DSWebSocket = {
return DSWebSocket()
}()
//MARK:- 鏈接服務(wù)器
func connectSever(){
socket = WebSocket(url: NSURL(string: 你的URL網(wǎng)址如:ws://192.168.3.209:8080/shop))
socket.delegate = self
socket.connect()
}
//發(fā)送文字消息
func sendBrandStr(brandID:String){
socket.writeString(brandID))
}
//MARK:- 關(guān)閉消息
func disconnect(){
socket.disconnect()
}
//MARK: - WebSocketDelegate
public func websocketDidConnect(socket: WebSocket){
debugPrint("連接成功了: \(error?.localizedDescription)")
webSocketDelegate?.websocketDidConnect!(self)
}
public func websocketDidDisconnect(socket: WebSocket, error: NSError?){
debugPrint("連接失敗了: \(error?.localizedDescription)")
webSocketDelegate?.websocketDidDisconnect!(self, error: error)
}
//注:一般返回的都是字符串
public func websocketDidReceiveMessage(socket: WebSocket, text: String){
debugPrint("接受到消息了: \(error?.localizedDescription)")
webSocketDelegate?.websocketDidReceiveMessage!(self, text: text)
}
public func websocketDidReceiveData(socket: WebSocket, data: NSData){
debugPrint("data數(shù)據(jù)")
webSocketDelegate?.websocketDidReceiveData!(self, data: data)
}
}
3.在別處,實(shí)現(xiàn)代理方法娩缰,用這個(gè)類(lèi)調(diào)用就可以 如:
-
先聲明下
-
代理實(shí)現(xiàn),在這里小編寫(xiě)了個(gè)extension谒府,你可以不寫(xiě)拼坎,只是為了代碼分區(qū)
-
鏈接websocket接收到消息,代理會(huì)打印消息的