DevGang
Авторизоваться

Сборка сервера и клиента WebSocket с использованием Python

Вы наверняка видели приложения реального времени, в которых данные часто изменяются или обновляются в режиме реального времени. Это происходит потому, что это приложение использует WebSocket для достижения этой функциональности.

К концу этой статьи вы сможете узнать:

  • Что такое WebSocket?
  • Как создать сервер и клиент WebSocket с помощью Python?

Что такое WebSocket?

WebSocket обеспечивает двустороннюю связь (двунаправленную) между двумя объектами через одно TCP-соединение. Это означает, что клиент и сервер WebSocket могут взаимодействовать друг с другом несколько раз в одном соединении.

Соединение Websocket — это полнодуплексный протокол соединения, который означает, что данные могут отправляться и получаться одновременно в обоих направлениях, сохраняя соединение до тех пор, пока сервер или клиент не решит прекратить соединение.

Он используется в приложениях реального времени для обмена данными с низкой задержкой в ​​обоих направлениях.

Как создать WebSocket с помощью Python

В этом разделе вы создадите сервер и клиент WebSocket с использованием Python. Вы будете использовать библиотеку веб-сокетов Python для создания сервера и клиента.

Установка зависимости

Откройте окно терминала и выполните следующую команду:

pip install websockets

Используя библиотеку websockets, вы можете очень легко создать сервер и клиент веб-сокетов на Python.

Создайте сервер WebSocket

В этом разделе вы создадите сервер WebSocket, который будет получать значения от клиента и на основе этих значений отправлять клиенту соответствующий ответ.

import websockets
import asyncio
 
# Creating WebSocket server
async def ws_server(websocket):
    print("WebSocket: Server Started.")
 
    try:
        while True:
            # Receiving values from client
            name = await websocket.recv()
            age = await websocket.recv()
 
            # Prompt message when any of the field is missing
            if name == "" or age == "":
                print("Error Receiving Value from Client.")
                break
 
            # Printing details received by client
            print("Details Received from Client:")
            print(f"Name: {name}")
            print(f"Age: {age}")
 
            # Sending a response back to the client
            if int(age) < 18:
                await websocket.send(f"Sorry! {name}, You can't join the club.")
            else:
                await websocket.send(f"Welcome aboard, {name}.")
 
    except websockets.ConnectionClosedError:
        print("Internal Server Error.")
 
 
async def main():
    async with websockets.serve(ws_server, "localhost", 7890):
        await asyncio.Future()  # run forever
 
if __name__ == "__main__":
    asyncio.run(main())

Приведенный выше код импортирует библиотеку websockets для создания сервера WebSocket и связи с ним, а также библиотеку asyncio для использования асинхронных задач.

Затем код определяет асинхронную функцию ws_server(), которая принимает соединение WebSocket (websocket) в качестве параметра.

Внутри функции используется блок try, который обрабатывает входящие сообщения от клиента. Внутри блока try создается цикл while, что означает, что код будет выполняться непрерывно.

Внутри цикла код получает два значения от клиента с помощью websocket.recv() и сохраняет их в переменных name и age соответственно. Код проверяет, отсутствует ли какое-либо значение, если да, то он выводит сообщение и разрывает циклы, в противном случае он продолжает работу и печатает значения, полученные от клиента.

Затем код отправляет соответствующий ответ обратно клиенту на основе полученных значений.

В блоке исключений код обрабатывает любые исключения websockets.ConnectionClosedError, которые указывают на ошибку, произошедшую во время соединения.

Затем код определяет другую асинхронную функцию под названием main(), которая запускает сервер WebSocket. Сервер WebSocket создается с использованием метода websockets.serve(), который прослушивает локальный хост и порт 7890.

Сервер будет работать вечно из-за asyncio.Future(). Это обеспечит работу сервера и его постоянную работу для прослушивания входящих сообщений.

В конце функция main() запускается с использованием asyncio.run(main()).

Создание клиента WebSocket

В этом разделе вы создадите клиент, который принимает вводимые пользователем данные и отображает ответ, отправленный сервером WebSocket.

import websockets
import asyncio
 
# The main function that will handle connection and communication
# with the server
async def ws_client():
    print("WebSocket: Client Connected.")
    url = "ws://127.0.0.1:7890"
    # Connect to the server
    async with websockets.connect(url) as ws:
        name = input("Your Name (type 'exit' to quit): ")
 
        if name == 'exit':
            exit()
 
        age = input("Your Age: ")
        # Send values to the server
        await ws.send(f"{name}")
        await ws.send(f"{age}")
 
        # Stay alive forever, listen to incoming msgs
        while True:
            msg = await ws.recv()
            print(msg)
 
# Start the connection
asyncio.run(ws_client())

Приведенный выше код определяет асинхронную функцию ws_client(). Внутри функции клиент WebSocket подключается к серверу WebSocket с помощью метода websockets.connect(), передаваемого с URL-адресом (ws://127.0.0.1:789) сервера, созданного в предыдущем разделе.

Пользователю предлагается ввести имя, и если он наберет «выход», код завершит процесс. Затем пользователю предлагается ввести свой возраст, и оба значения (имя и возраст) отправляются на сервер WebSocket с помощью метода ws.send().

После этого код входит в бесконечный цикл для непрерывного прослушивания входящих сообщений от сервера с помощью метода ws.recv(). Затем сообщение печатается на консоли.

Наконец, функция ws_client() запускается с использованием asyncio.run(ws_client()). Это запустит клиент WebSocket для приема информации от пользователя и отображения ответа, отправленного сервером.

Запуск сервера и клиента WebSocket

Вам необходимо поместить серверный и клиентский код в два отдельных файла Python. Сначала вам нужно запустить скрипт сервера WebSocket, чтобы запустить сервер.

Откройте окно терминала, перейдите в каталог проекта и запустите файл сценария. В этом случае сценарий хранится в файле Python main.py.

python main.py

Теперь откройте другое окно терминала и запустите клиентский скрипт WebSocket, в данном случае скрипт хранится в файле client.py.

python client.py

Это запустит клиент WebSocket, подключенный к серверу. Вы увидите подсказки с запросом вашего имени и возраста.

Здесь «Sachin» и «22» отправляются на сервер, а в ответ сервер отвечает сообщением «Welcome aboard, Sachin» на консоли.

Информация, введенная пользователем, будет отображаться на консоли сервера WebSocket. Вы можете увидеть это на изображении ниже.

Вы также можете запустить клиент с помощью интерактивной оболочки WebSocket, используя следующую команду.

python -m websockets ws://localhost:7890

Заключение

В этой статье вы научились создавать сервер и клиент WebSocket, используя библиотеку веб-сокетов в Python. Эта технология используется в приложениях, в которых данные изменяются в режиме реального времени.

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу