Issues listening incoming messages in websocket client on Python 3.6

后端 未结 1 1448
耶瑟儿~
耶瑟儿~ 2020-12-31 20:21

I\'m trying to build a websocket client on Python using websockets package from here: Websockets 4.0 API

I\'m using this way instea

相关标签:
1条回答
  • 2020-12-31 21:17

    Finally, based on this post answer, I modified my client and main files this way:

    WebSocket Client:

    import websockets
    import asyncio
    
    class WebSocketClient():
    
        def __init__(self):
            pass
    
        async def connect(self):
            '''
                Connecting to webSocket server
    
                websockets.client.connect returns a WebSocketClientProtocol, which is used to send and receive messages
            '''
            self.connection = await websockets.client.connect('ws://127.0.0.1:8765')
            if self.connection.open:
                print('Connection stablished. Client correcly connected')
                # Send greeting
                await self.sendMessage('Hey server, this is webSocket client')
                return self.connection
    
    
        async def sendMessage(self, message):
            '''
                Sending message to webSocket server
            '''
            await self.connection.send(message)
    
        async def receiveMessage(self, connection):
            '''
                Receiving all server messages and handling them
            '''
            while True:
                try:
                    message = await connection.recv()
                    print('Received message from server: ' + str(message))
                except websockets.exceptions.ConnectionClosed:
                    print('Connection with server closed')
                    break
    
        async def heartbeat(self, connection):
            '''
            Sending heartbeat to server every 5 seconds
            Ping - pong messages to verify connection is alive
            '''
            while True:
                try:
                    await connection.send('ping')
                    await asyncio.sleep(5)
                except websockets.exceptions.ConnectionClosed:
                    print('Connection with server closed')
                    break
    

    Main:

    import asyncio
    from webSocketClient import WebSocketClient
    
    if __name__ == '__main__':
        # Creating client object
        client = WebSocketClient()
        loop = asyncio.get_event_loop()
        # Start connection and get client connection protocol
        connection = loop.run_until_complete(client.connect())
        # Start listener and heartbeat 
        tasks = [
            asyncio.ensure_future(client.heartbeat(connection)),
            asyncio.ensure_future(client.receiveMessage(connection)),
        ]
    
        loop.run_until_complete(asyncio.wait(tasks))
    

    Now, client keeps alive listening all messages from server and sending 'ping' messages every 5 seconds to server.

    0 讨论(0)
提交回复
热议问题