美文网首页
Socket.IO-Client-Swift的使用

Socket.IO-Client-Swift的使用

作者: 心猿意码_ | 来源:发表于2022-08-15 13:39 被阅读0次

    1、导入

    pod 'Socket.IO-Client-Swift', '~> 15.2.0'
    

    iOS使用Socket.IO的版本对应后台版本,不然无法连接
    2、引用

    import SocketIO
    

    3、官方提供的使用方式

    import SocketIO
    
    let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .compress])
    let socket = manager.defaultSocket
    
    socket.on(clientEvent: .connect) {data, ack in
        print("socket connected")
    }
    
    socket.on("currentAmount") {data, ack in
        guard let cur = data[0] as? Double else { return }
        
        socket.emitWithAck("canUpdate", cur).timingOut(after: 0) {data in
            if data.first as? String ?? "passed" == SocketAckValue.noAck {
                // Handle ack timeout 
            }
    
            socket.emit("update", ["amount": cur + 2.50])
        }
    
        ack.with("Got your currentAmount", "dude")
    }
    
    socket.connect()
    

    以上方法尝试多次,但并无法连接成功!!!!

    4、成功连接方式

    import SocketIO
    
    class SocketUtil {
        let WSURL = URL(string: "http://10.0.41.219:10246")
        static let share = SocketUtil()
        private var manager:SocketManager?
        private var socket:SocketIOClient?
        // [] 里面传递需要的字段 ,比如版本号  [ "h": HttpRequestUtil.share.platformVersion]
        private var socketHeaders : [String:String] = [:]
        private var config:SocketIOClientConfiguration = []
    
    //  MARK: - Public
        /// 连接socket
        public func connect(authorization:String, uid:String){
            if manager != nil {
                //断开连接
                disconnect()
            }
            config = [
                .log(false),//打印日志
                .compress,
                // 此设置相当重要,因为在拼接到URL后面的时候,怎么都连接不上后台,改为params传值方式的时候,一下就连接上了。
                .connectParams(["source":3, "Authorization":authorization, "uid":uid]),
                .extraHeaders(socketHeaders),
                .reconnects(true), //是否重连机制
                .reconnectWaitMax(100) //重新连接等待最大秒数
            ]
            manager = SocketManager(socketURL: WSURL!, config: config)
            socket = manager?.defaultSocket
            socket?.connect()
        }
    }
    
    

    以上步骤连接完成后,就可以做通讯处理了

    5、以下链接是一个demo

    • 在封装内提供了socket连接状态的监听及处理;
    • 断线重连处理;
    • 主动打开连接处理;
    • 监听接收到消息的处理;
    • 发送消息处理;
      可以完成基本的使用了:
      https://gitee.com/shouny/test-socket.git

    相关文章

      网友评论

          本文标题:Socket.IO-Client-Swift的使用

          本文链接:https://www.haomeiwen.com/subject/trbkgrtx.html