Документация по Python

Вебсокеты (WebSockets) в Python

В: Документация по Python

Введение

Примеры

Простое эхо с aiohttp

aiohttp обеспечивает асинхронные WebSockets.

импорт asyncio из aiohttp импорт ClientSession с помощью ClientSession () в качестве сеанса: async def hello_world (): websocket = await session.ws_connect ("wss: //echo.websocket.org") websocket.send_str («Привет, мир!») print («Получено:», (ожидание websocket.receive ()). Data) ожидание websocket.close () loop = asyncio.get_event_loop () loop.run_until_complete (hello_world ())

Класс Wrapper с aiohttp

aiohttp.ClientSession может быть использован в качестве родителя для пользовательского класса WebSocket.

импорт asyncio из aiohttp import класс ClientSession EchoWebSocket (ClientSession): URL = "wss: //echo.websocket.org" def __init __ (self): super () .__ init __ () self.websocket = нет async def connect (self): "" "Подключиться к WebSocket." "" Self.websocket = await self.ws_connect (self.URL) async def send (self, message): "" "Отправить сообщение в WebSocket." "" Assert self.websocket Нет, "Вы должны подключиться первым!" self.websocket.send_str (message) print ("Отправлено:", сообщение) async def receive (self): "" "Получить одно сообщение из WebSocket." "" Утвердить, что self.websocket не None, "Сначала необходимо подключиться !» return (await self.websocket.receive ()). data async def read (self): "" "Чтение сообщений из WebSocket." "" Утверждение, что self.websocket не является None, "Сначала вы должны подключиться!" в то время как self.websocket.receive (): message = await self.receive () print ("Received:", message), если message == "Echo 9!": прервать async def send (websocket): для n в диапазоне (10 ): await websocket.send ("Echo {}!". format (n)) await asyncio.sleep (1) loop = asyncio.get_event_loop () с EchoWebSocket () в качестве websocket: loop.run_until_complete (websocket.connect ()) tasks = (send (websocket), websocket.read ()) loop.run_until_complete (asyncio.wait (tasks)) loop.close ()

Использование автобана в качестве фабрики веб-сокетов

Пакет Autobahn можно использовать для фабрик серверов Python.

Документация по пакету Python Autobahn

Для установки обычно нужно просто использовать команду терминала

(Для Linux):

 sudo pip install autobahn

 

(Для Windows):

 python -m pip install autobahn

 

Затем в скрипте Python можно создать простой эхо-сервер:

from autobahn.asyncio.websocket import WebSocketServerProtocol
class MyServerProtocol(WebSocketServerProtocol):
    '''When creating server protocol, the
    user defined class inheriting the 
    WebSocketServerProtocol needs to override
    the onMessage, onConnect, et-c events for 
    user specified functionality, these events 
    define your server's protocol, in essence'''
    def onMessage(self,payload,isBinary):
        '''The onMessage routine is called 
        when the server receives a message.
        It has the required arguments payload 
        and the bool isBinary. The payload is the 
        actual contents of the "message" and isBinary
        is simply a flag to let the user know that 
        the payload contains binary data. I typically 
        elsewise assume that the payload is a string.
        In this example, the payload is returned to sender verbatim.'''
        self.sendMessage(payload,isBinary)
if__name__=='__main__':
    try:
        importasyncio
    except ImportError:
        '''Trollius = 0.3 was renamed'''
        import trollius as asyncio
    from autobahn.asyncio.websocketimportWebSocketServerFactory
    factory=WebSocketServerFactory()
    '''Initialize the websocket factory, and set the protocol to the 
    above defined protocol(the class that inherits from 
    autobahn.asyncio.websocket.WebSocketServerProtocol)'''
    factory.protocol=MyServerProtocol
    '''This above line can be thought of as "binding" the methods
    onConnect, onMessage, et-c that were described in the MyServerProtocol class
    to the server, setting the servers functionality, ie, protocol'''
    loop=asyncio.get_event_loop()
    coro=loop.create_server(factory,'127.0.0.1',9000)
    server=loop.run_until_complete(coro)
    '''Run the server in an infinite loop'''
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        server.close()
        loop.close()

 

В этом примере сервер создается на локальном хосте (127.0.0.1) на порту 9000. Это прослушивающий IP-адрес и порт. Это важная информация, так как с ее помощью вы можете определить адрес локальной сети и порт вашего компьютера от модема, независимо от того, какие маршрутизаторы у вас есть на компьютере. Затем, используя Google для исследования вашего WAN IP, вы можете создать свой веб-сайт для отправки сообщений WebSocket на ваш WAN IP через порт 9000 (в этом примере).

Важно, чтобы вы перенесли данные с модема обратно, то есть, если у вас есть маршрутизатор, подключенный к модему, войдите в настройки конфигурации модема, перенесите порт с модема на подключенный маршрутизатор и т. Д. До окончательного маршрутизатора вашего компьютера. подключен, передает информацию, полученную через модемный порт 9000 (в этом примере), на него.

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.