How to build a WebSocket client in Python?

Mariah 118 Published: 09/06/2024

How to build a WebSocket client in Python?

Building a WebSocket client in Python is quite straightforward. The primary requirement is the websockets library. You can install it using pip:

pip install websockets

Here's an example code snippet that demonstrates how to create a basic WebSocket client in Python:

import asyncio

import websockets

Define the URL of your WebSocket server

ws_url = "ws://localhost:8765"

async def main():

Establish the WebSocket connection

async with websockets.connect(ws_url) as ws:

while True:

try:

Send a message to the WebSocket server

await ws.send("Hello, WebSockets!")

Receive messages from the WebSocket server

message = await ws.recv()

print(f"Received: {message}")

except websockets.ConnectionClosed:

print("WebSocket connection closed.")

break

Run the main function using asyncio

asyncio.get_event_loop().run_until_complete(main())

This example establishes a connection to a WebSocket server, sends a message, receives a response from the server, and continues sending and receiving messages indefinitely. The ConnectionClosed exception is used to catch and handle disconnections.

Here's another way you can create a WebSocket client using Python:

import asyncio

import json

class WebSocketClient:

def init(self):

self.url = "ws://localhost:8765"

async def send_message(self, message):

Establish the WebSocket connection

async with websockets.connect(self.url) as ws:

Send a message to the WebSocket server

await ws.send(message)

Receive messages from the WebSocket server

while True:

try:

response = await ws.recv()

print(f"Received: {response}")

except websockets.ConnectionClosed:

print("WebSocket connection closed.")

break

async def receive_messages(self):

Establish the WebSocket connection

async with websockets.connect(self.url) as ws:

while True:

try:

Receive messages from the WebSocket server

message = await ws.recv()

print(f"Received: {message}")

except websockets.ConnectionClosed:

print("WebSocket connection closed.")

break

async def main(self):

Send and receive messages

await self.send_message("Hello, WebSockets!")

await self.receive_messages()

Run the main function using asyncio

asyncio.get_event_loop().run_until_complete(WebSocketClient().main())

This example demonstrates how to create a WebSocket client that can send and receive messages. The send_message method sends a message to the server, while the receive_messages method receives messages from the server.

Note: For running the above examples successfully, you need a WebSocket server. You can use libraries like flask-socketio, django-channels, or autobahn for creating your own WebSocket server in Python.

Python WebSocket documentation

The Python WebSocket protocol! Exciting stuff!

Here's the official documentation:

What is WebSocket?

WebSocket is a protocol for establishing and managing bidirectional communication between a web browser or other client, and a server over the Web.

Key Features:

Bidirectional communication: Unlike traditional HTTP requests, where the client initiates a request and the server responds, WebSocket allows both parties to send messages at any time. Real-time communication: With WebSocket, you can establish real-time, bi-directional communication between your web application and the user's browser.

How it Works:

Handshake: The process of establishing a WebSocket connection begins with a special "handshake" between the client (usually a web browser) and the server. Frame: A WebSocket message is called a "frame." Frames are made up of three parts: Header: Contains flags indicating whether the frame is a close, ping, pong, or regular message. Payload: The actual data being sent. Masking: Optional, used for encryption and integrity checks.

Types of WebSocket Messages:

Control Frames: Used to manage connections. Text Frames: For sending text messages (default is UTF-8). Binary Frames: For sending binary data (e.g., images).

Creating a WebSocket Connection in Python:

To create a WebSocket connection using Python, you'll need the following libraries:

websockets asyncio for handling asynchronous requests

Here's an example:

import asyncio

import websockets

async def handle_connection(websocket, path):

print(f"New connection from {path}")

Receive and send messages

try:

while True:

message = await websocket.recv()

print(f"Received: {message}")

if message == "close":

break

response = f"You sent: {message}"

await websocket.send(response)

except websockets.ConnectionClosed:

print("Connection closed")

finally:

Perform any cleanup tasks

pass

start_server = websockets.serve(handle_connection, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)

This code sets up a WebSocket server that listens for incoming connections on port 8765. When a connection is established, it receives and sends messages (text frames).

Conclusion:

WebSocket is an exciting technology that allows you to establish real-time communication between your web application and the user's browser. With Python's websockets library and asyncio, you can easily create WebSocket servers and clients.

Happy coding!