WebSockets in Swift: Building Real-Time Apps in an Hour

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Why WebSockets Are a Superpower for Swift Developers

\n\n

Imagine: you open a messenger, and messages arrive instantly. No endless page refreshes, no "pull to refresh". This is the magic of real-time, and in Swift it's implemented using WebSockets. If you've only been using HTTP requests so far, you're missing out on a whole world of possibilities: online chats, stock quotes, live notifications, multiplayer games.

\n\n

In this article, we'll break down how to add WebSockets to your Swift app. No fluff — only code you can copy and run. By the end, you'll be able to write your first real-time chat in less than an hour. Let's go!

\n\n

What Are WebSockets and How Are They Better Than REST API?

\n\n

WebSockets is a protocol for two-way communication between client and server. Unlike REST, where the client constantly "pings" the server with questions, WebSocket establishes a persistent connection. The server can send data on its own whenever it appears. It's like the difference between constantly calling a friend "Are you there yet?" and simply opening the door to let them in.

\n\n

For a Swift developer, the main advantage is saving traffic and resources. Instead of dozens of HTTP requests per minute — one single connection. Perfect for trading apps, online games, system monitoring.

\n\n

When Should You Use WebSockets in iOS?

\n
    \n
  • Online chats — messages must be delivered instantly.
  • \n
  • Stock quotes — prices change every second.
  • \n
  • Multiplayer games — synchronizing player actions.
  • \n
  • Real-time notifications — new like, order, message.
  • \n
  • IoT applications — sensor data arrives continuously.
  • \n
\n\n

But don't use WebSockets everywhere. If you just need to load a product list — a regular HTTP GET will do better. WebSocket is justified when data updates more often than once every 10 seconds.

\n\n

Setting Up WebSocket in Swift: From Zero to First Connection

\n\n

Swift has built-in WebSocket support — the URLSessionWebSocketTask class. No third-party libraries needed. Let's write a simple client.

\n\n

Step 1. Create a WebSocket Connection

\n\n
import Foundation\n\nclass WebSocketManager: NSObject {\n    private var webSocketTask: URLSessionWebSocketTask?\n    private let session: URLSession\n    \n    override init() {\n        self.session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue())\n        super.init()\n    }\n    \n    func connect(to url: URL) {\n        webSocketTask = session.webSocketTask(with: url)\n        webSocketTask?.resume()\n        print("WebSocket connection established")\n        receiveMessage()\n    }\n    \n    func disconnect() {\n        webSocketTask?.cancel(with: .normalClosure, reason: nil)\n        print("Connection closed")\n    }\n}\n
\n\n

This is a basic wrapper. The resume() method starts the connection — without it, nothing will happen. Remember this as a mantra: always call resume().

\n\n

Step 2. Send and Receive Messages

\n\n
extension WebSocketManager {\n    func sendMessage(_ text: String) {\n        let message = URLSessionWebSocketTask.Message.string(text)\n        webSocketTask?.send(message) { error in\n            if let error = error {\n                print("Send error: \\(error.localizedDescription)")\n            }\n        }\n    }\n    \n    private func receiveMessage() {\n        webSocketTask?.receive { [weak self] result in\n            switch result {\n            case .success(let message):\n                switch message {\n                case .string(let text):\n                    print("Received message: \\(text)")\n                

Blogs

Book Recommendations