1.连接socket,路径错误,poll message报404,解决方案,初始化SocketManager的时候,在config中自定义路径。
config: [.log(true), .connectParams(["token": sessionID,"uid": uid]), .path("/websocket/")]
2.在连接socket之前,URL上要拼接token和uid验证用户信息。而token和uid,需要在http用户登录后,分别http请求sessionID和userinfo。
使用DispatchGroup的notify,并结合DispatchGroup的enter和leave,能很好地解决这种异步调用组合的问题。
//sessionID和userID两个请求都成功后再回调callBack: ResultHandler
varuserInfoError:SocketErrorType= .success
letgroup =DispatchGroup()
letuserInfoRequest =DispatchQueue(label:"userInfo")
group.enter()
userInfoRequest.async(group: group, execute: {
self.requestUserInfo(callBack: { (error)in
userInfoError = error
group.leave()
})
})
//SessionID的请求
varsessionIDError:SocketErrorType= .success
letsessionIDRequest =DispatchQueue(label:"sessionID")
group.enter()
sessionIDRequest.async(group: group, execute: {
self.getSessionID(callBack: { (error)in
sessionIDError = error
group.leave()
})
})
//都请求并回调完成
group.notify(queue:DispatchQueue.main) {
switch(userInfoError, sessionIDError) {
case(.success, .success):
callBack?(.success)
case(.success,_):
callBack?(sessionIDError)
case(_, .success):
callBack?(userInfoError)
default:
callBack?(userInfoError)//传userInfo的error
}
}
网友评论