# ©版权声明:本文为Andy_wangpeng原创文章,未经允许不得转载。
#如需转载请注明版权
每当小编再开发中遇到了困难,在网上搜,简直是垃圾堆里找金子。国内网站真的全不可靠,最后翻墙去国外网站寻找,才可以找到。找到了写websocket文章,同事找到了集成的框架文件,一个叫Starscream
的第三方库,附上github地址『去看下->Starscream』
最近,开发中要使用WebSockrt,做到实时监控消息,需要用的技术是websocket。
什么原理什么的。我就不说了,自己百度下也行,是在不行给你们几个链接自己去看吧
1.先认识什么是WebSocket
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。
在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
2.集成WebSocket?
小编的是Xcode8.0 Swift3.0,在这里小编采用cocoaPod下载的
1.cocopod下载代码: (projectName ):他是你工程更的名字,记得更换不要写错.
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
`##注意:更新完了会报错用命令转下即可,不懂的再问我`
屏幕快照 2016-12-02 09.34.01.png
2. 下载完成后,导入 import Starscream
首先写一个单例,实现一些方法
//
// Created by 王鹏 on 16/9/22.
// Copyright © 2016年 鼎商动力. 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 接受二进制信息*/
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:- 链接服务器
func connectSever(){
socket = WebSocket(url: NSURL(string: 你的URL网址如:ws://192.168.3.209:8080/shop))
socket.delegate = self
socket.connect()
}
//发送文字消息
func sendBrandStr(brandID:String){
socket.writeString(brandID))
}
//MARK:- 关闭消息
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数据")
webSocketDelegate?.websocketDidReceiveData!(self, data: data)
}
}
3.在别处,实现代理方法,用这个类调用就可以 如:
-
先声明下
声明.png -
代理实现,在这里小编写了个extension,你可以不写,只是为了代码分区
delegate.png -
链接websocket接收到消息,代理会打印消息的
链接websocket.png