Сервер aiohttp не общается с клиентом socket.io, ошибка 404 - PullRequest
0 голосов
/ 02 июня 2018

Когда я загружаю клиент в браузер, консоль каждые несколько секунд печатает следующую ошибку:

index.js:83 GET http://localhost:8080/ws/?EIO=3&transport=polling&t=MEzMuny 404 (Not Found)

на стороне сервера с включенным регистратором выводит следующее сообщение:

18:08:56 127.0.0.1 [01/Jun/2018:22:08:56 +0000] "GET /ws/?EIO=3&transport=polling&t=MEzPODJ HTTP/1.1" 404 172 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"

Вот код сервера:

async def hello(request):
    return web.FileResponse('./hello.html')

async def websocket_handler(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)
    async for msg in ws:
        if msg.type == aiohttp.WSMsgType.TEXT:
            if msg.data == 'close':
                await ws.close()
            else:
                await ws.send_str(msg.data + '/answer')
        elif msg.type == aiohttp.WSMsgType.ERROR:
            print('ws connection closed with exception %s' % ws.exception())
    return ws

app = web.Application()
app.add_routes([
    web.get('/', hello),
    web.get('/ws', websocket_handler)
])
web.run_app(app)

Код клиента, обслуживаемый по маршруту по умолчанию:

<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script>
 const socket = io('http://localhost:8080', {path: '/ws'});
 console.log(socket)
 socket.on('connect', function(){
     console.log('connected')
 });
</script>
<body></body>
</html>

Спасибо за просмотр.

1 Ответ

0 голосов
/ 04 июня 2018

Видимо socket.io не играет в мяч с aiohttp.Изменение реализации клиента на WebSocket решило проблему:

 const socket = new WebSocket(`ws://${window.location.host}/ws`)
 socket.onopen = () => { console.log('connected') }
 socket.onmessage = event => { console.log(event.data) }
 socket.onclose = () => { console.log('disconnected') }
...