Не самый лучший ответ в мире, но, надеюсь, это поможет вам!
Браузеры не поддерживают необработанные сокеты, но поддерживают один конкретный c протокол сокетов, WebSockets, WebSockets построены на основе TCP / IP и являются отличным и простым способом создания долговременных соединений между браузером и другим компьютером. Поскольку ваш код изначально использовал необработанные сокеты, браузер никогда не собирался выполнять рукопожатие. Теперь, когда вы изменили свой ответ на поддержку веб-сокетов, вы стали ближе, чем когда-либо!
Я не уверен, с какой проблемой вы столкнулись с новым кодом, потому что он отлично работает для меня. Я сделал несколько модификаций, так как я использую множество сред разработки и не могу мешать отладке StackExchange. Вот мой код, который имеет только 3 измененные строки от вашего:
<!DOCTYPE html>
<html>
<head>
<title>WebSocket demo</title>
</head>
<body>
<script>
var ws = new WebSocket('ws://127.0.0.1:5678/'),
messages = document.createElement('ul');
ws.onmessage = function(event) {
var messages = document.getElementsByTagName('ul')[0],
message = document.createElement('li'),
content = document.createTextNode(event.data);
message.appendChild(content);
messages.appendChild(message);
};
document.body.appendChild(messages);
</script>
</body>
</html>
#!/usr/bin/env python3
# WS server example
import sys
# forcibly adding a path for the following libraries
# this is probably not necessary on anyone else's machine,
# but I need it just for testing this answer
sys.path.append('/usr/local/lib/python3.7/site-packages')
import asyncio
import websockets
import datetime
import random
async def time(websocket, path):
while True:
now = datetime.datetime.utcnow().isoformat() + "Z"
await websocket.send(now)
await asyncio.sleep(random.random() * 3)
start_server = websockets.serve(time, "127.0.0.1", 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
И он прекрасно работает:
Я сохранил ваш Сценарий python как foo.py
и документ html как bar.html
на мой рабочий стол. Чтобы запустить сервер python, я запустил python3 foo.py
из командной строки, а затем открыл файл html с помощью предпочитаемого браузера, для этого примера не требовались http-серверы.
Какие ошибки Вы видите в браузере или консоли, которые запрещают это работать?
Ошибка 12029 - это ошибка, которую видит OP! По умолчанию Edge не будет прослушивать локальные интерфейсы, например localhost и 127.0.0.1. В этой теме на Microsoft.com есть несколько советов по устранению неполадок для разработчиков, использующих Edge. Дайте нам знать, если эти конфигурации полезны.