Introduction to Integration-Implementation Web Socket In iOS
WebSocket is one of the very fastest ways of communication when network availability is present. Normally In iOS and other platform developer use to do a lot of other ways to download, upload, sync, and chat operation, but it may or may not be efficient to do such operation.
Many such cases arise where upload, download, and chat are not working as expected and even user experiences are too bad. WebSocket is socket-based where TCP connection established during the communication.
It is fundamentally founded on sever- clients yet in the event that you look the bit of leeway over REST API call and SOAP call, at that point it has an extraordinary capacity to give a quicker method of getting information without bringing on any issues.
In the Initial Stage, there was no concept of data sending using socket programming but iOS app development services also introduce the new concept of WebSocket to leverage the solution and providing seamless uploading/downloading using WebSocket connection.
So, Apple introduces a new framework which is called a network framework that handles all the web socket connection programming and frame.
WebSocket use in iOS:-
- Streaming Video.
- Chat-bot where users can use the chat.
- Uploading large data.
- Download a large amounts of data like PDF files.
- Fetching & Showing Data in the fastest way.
- Reducing the code in the iOS side to pull the data from the server.
- Efficient and Less Time Processing Job.
- Great user-experience provider.
WebSocket Framework or Library in iOS:-
- CFNetwork Framework if the developer were using older Swift code.
- Network Framework if the developer were using la
WebSocket Session establishment steps:-
In the WebSocket URL session and URL Session, Web Socket can be created. The main objective for the URL session in WebSocket to upload, download, and fetch the data from the server.URL session object has configuration capability to store, retrieve, and manage cookies or cache which can be useful in the offline and online mode of the application. There are few delegates that can be used for URL session to create its background session, shared session, and Ephemeral session. As per requirement and needs we need to choose the proper delegate method to create sessions over the network.
func webSessionSocket(with: URL) ->URLSessionWebSocketTask
where URL is passed in the request and session created using the WebSocket session task.
func webSessionSocket(with: URLRequest) -> URLSessionWebSocketTask
where URL created then the URL request is passed in the web socket request over the WebSocket session task.
func webSessionSocket(with: URL, protocols: [String]) ->
URLSessionWebSocketTask where the URL created then the URL is passed with an array of the different protocols over the WebSocket session task.
WebSocket Connection establishment steps:-
Developer need to add the foundation framework and CFNetwork framework and then need to create the WebSocket session class which contains the variable for socket variable and session created then URL request need to hit the server
classWebSocketSessionCreation:NSObject{var sessionCreation:URLSession?var taskCreation:URLSessionWebSocketTask?
}
let url = URL(string: “http://webSocketSession.com”)!
var request = URLRequest(url: url)
request.addValue(“http://webSocketSession.com”, forHTTPHeaderField: “Token”)
self. WebSocketSessionCreation= WebSocketTest(urlRequest: request)
self.WebSocketSessionCreation?.connect()
WebSocket Download Steps:-
WebSocket Download file is very faster because it can perform multiple tasks at a time and TCP connection established between the application and server.
// WebSocket variable declaration in a swift file in the controller for URL session and URL download session task
Var webSocketTask: URLSessionDownloadTask!
Var webSocketSession: URLSession!
// WebSocket Configuration session created and passed the identifier to download the content where the session will be passed in url session for performing the task in a sequential manner.
LetwebSocketConfiguration = URLSessionConfiguration.background(withIdentifier: “backgroundSession”)
backgroundWebsocketSession = WebsocketDownloader.urlSessionManager(configuration: webSocketSession, delegate: self, delegateQueue: OperationQueue.main)
// WebSocket download file created and task resume
classwebsocketDownloader:NSObject,URLSessionTaskDelegate,URLSessionDownloadDelegate{// url session where sequence of delegate will be called one ot another to perform the download all the content in funcurlSessionManager(_session:URLSession,downloadTask:URLSessionDownloadTask,didWriteDatabytesWritten:Int64,totalBytesWritten:Int64,totalBytesExpectedToWrite:Int64){iftotalBytesExpectedToWrite>0{letprogress=Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)debugPrint(“DownloadData\(downloadTask)\( DownloadData)”)}} funcurlSessionManager(_session:URLSession,downloadTask:URLSessionDownloadTask,didFinishDownloadingTolocation:URL){debugPrint(“DownloadData finished: \(location)”)try?FileManager.default.removeItem(at:location)} funcurlSessionManager(_session:URLSession,task:URLSessionTask,didCompleteWithErrorerror:Error?){debugPrint(“DownloadData completed: \(task), error: \(error)”)} }
WebSocket Upload Steps:-
// Upload images in the server using the WebSocket
guard let image = ImagedataUpload else { return }
let filename = “Apple.png”
//Create boundary string operation by unique pre-applicaton string
let boundary = UUID().uuidString
let filerequest = “passwordreq
let filerequestValue = “fileupload”
let username = “apple”
let usernamevalue = “993339”djdjdjjd
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// WebSocket URLRequest to POST and url need to mentioned to create the request
var websocketurlRequest = URLRequest(url: URL(string: “https://apple.inc/user/upload.php”)!)
websocketurlRequest.httpMethod = “POST”
websocketurlRequest.setValue(“multipart/form-data; boundary=\(boundary)”, forHTTPHeaderField: “Content-Type”)
var data = Data()
// Add the request data and request value for the WebSocket connection
data.append(“\r\n-\(boundary)\r\n”.data(using: .utf8)!)
data.append(“Content-Disposition: form-data; name=\”\(filerequest)\”\r\n\r\n”.data(using: .utf8)!)
data.append(“\(filerequestvalue)”.data(using: .utf8)!)
// Add the request username and request username value for the WebSocket connection
data.append(“\r\n-\(boundary)\r\n”.data(using: .utf8)!)
data.append(“Content-Disposition: form-data; name=\”\(username)\”\r\n\r\n”.data(using: .utf8)!)
data.append(“\(usernamevalue)”.data(using: .utf8)!)
–
// Add the image data to upload in the server suing the WebSocket connection
data.append(“\r\n-\(boundary)\r\n”.data(using: .utf8)!)
data.append(“Content-Disposition: form-data; name=\”fileToUpload\”; filename=\”\(filename)\”\r\n”.data(using: .utf8)!)
data.append(“Content-Type: image/png\r\n\r\n”.data(using: .utf8)!)
data.append(UIImagePNGRepresentation(image)!)
data.append(“\r\n-\(boundary)-\r\n”.data(using: .utf8)!)
// Send the POST data to upload in the server using the WebSocket connection url
session.uploadTask(with: urlRequest, from: data, completionHandler: { responseData, response, error in
if(error != nil){
print(“\(error!.localizedDescription)”)
}
guard let responseData = responseData else {
print(“no response data”)
return
}
if let responseString = String(data: responseData, encoding: .utf8) {
print(“uploaded to: \(responseString)”)
}
}).resume()