Среда: Python 3.6.3 на Windows 10.
websocket on port 8765
Process_A.py --------------------------> Process_B.py;
websocket on port 5678
Process_C.py --------------------------> Process_D.html;
Я могу успешно отправить из Process_A.py в Process_B.py; и из Process_ C .py в Process_D. html.
Когда я объединяю Process_B и Process_ C: Process_A.py -------> Process_B & C .py - ----> Process_D. html
Я получаю следующую ошибку: Но когда я пытаюсь связать два (средний раздел: WS_Echo_Server.py и WS_Server.py), я получаю следующую ошибку:
Запуск сервера веб-сокетов на локальном узле: 8765 Сервер receiveOfMessage: полученное сообщение :: 22 :: sendMessageToWebPage - отправка сообщения :: 22 :: 0 :: Ошибка в трассировке обработчика соединения (последний вызов последнего):
Файл "C: \ Program Files \ Python36 \ lib \ site-packages \ websockets \ server.py", строка 191, в обработчике ожидают self.ws_handler (self, path) Файл "index.py", строка 1089, в receiveOfMessage ожидают sendMessageToWebPage (msg) Файл "index.py", строка 1076, в sendMessageToWebPage asyn c с websockets.connect (uri_ws_address) как web_socket: файл "C: \ Program Files \ Python36 \ lib \ site -packages \ websockets \ client.py ", строка 517, в aenter retu rn await self Файл "C: \ Program Files \ Python36 \ lib \ site-packages \ websockets \ client.py", строка 535, в await_impl транспорт, протокол = ожидание файла self._create_connection () "C: \ Program Files \ Python36 \ lib \ asyncio \ base_events.py", строка 786, в create_connection ',' .join (str (ex c) для ex c в исключениях))) OSError: Многочисленные исключения: [Errno 10061] Ошибка вызова Connect (':: 1', 5678), [Errno 10061] Ошибка вызова Connect ('127.0.0.1', 5678)
Process_A. py :
#!/usr/bin/env python
import asyncio
import websockets
import datetime
import random
import os
async def hello(uri):
async with websockets.connect(uri) as web_socket:
now : str = datetime.datetime.utcnow().isoformat() + "Z"
msg = now + " " + "Hello World."
print(f"WS_Sender_Of_Stuff -- sending message::{msg}::")
await web_socket.send(msg)
await asyncio.sleep(random.random() * 10)
while True :
try :
asyncio.get_event_loop().run_until_complete(hello('ws://localhost:8765'))
except KeyboardInterrupt :
break
except Exception as er :
print(f"Received an Error: {str(er)}")
Process_B.py :
import asyncio
import websockets
async def echo(websocket, path):
counter : int = 0
async for message in websocket:
print(f"Echo Server: Received Message::{message}::")
msg = message + " :: " + str(counter)
counter += 1
await websocket.send(msg)
asyncio.get_event_loop().run_until_complete(
websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()
Process_ C .py :
import asyncio
import datetime
import random
import websockets
async def WS_MessageToSend(p_websocket, p_msg : str) :
await p_websocket.send(p_msg)
async def time(p_websocket, path):
while True:
now = datetime.datetime.utcnow().isoformat() + "Z"
await WS_MessageToSend(p_websocket, now)
await asyncio.sleep(random.random() * 3)
def Server_Of_Stuff() :
WS_Server_Port : int = 5678
WS_Host_Address : str = "localhost"
ws_sender_server = websockets.serve(time, WS_Host_Address, WS_Server_Port)
event_loop = asyncio.get_event_loop()
event_loop.run_until_complete(ws_sender_server)
event_loop.run_forever()
Server_Of_Stuff()
Process_D. html:
<!DOCTYPE html>
<html>
<head>
<title>WebSocket demo</title>
</head>
<body>
<script>
var messages = document.createElement('ul');
var ws = null;
function selfStart() {
startWS();
ws.onopen = function() {
console.log("Connected");
};
ws.onmessage = function (event) {
var messages = document.getElementsByTagName('ul')[0];
var message = document.createElement('li');
var content = document.createTextNode(event.data);
message.appendChild(content);
messages.appendChild(message);
};
ws.onclose = function() {
console.log("WS --- ON CLOSE ---");
ws = null;
var set_timer_id = setInterval(function() {
console.log("**** Inside of setInterval function ****")
if (ws !== null && ws.readyState !== 3) {
clearInterval(set_timer_id);
return;
}
try {
selfStart();
} catch (e) {
console.log("Exception from startWS:" + e)
}
}, 5000)
};
ws.onerror = function () {
console.log("WS --- ERROR");
};
console.log("End Of ws.onmessage");
function startWS() {
if (ws === null) {
try {
ws = new WebSocket("ws://127.0.0.1:5678/");
}
catch (error_of) {
console.log("startWS got exception: " + error_of)
}
}
}
}
document.body.appendChild(messages);
selfStart();
</script>
</body>
</html>
Вот код для объединенного сервера / отправителя ( Process_B & C .py ) :
import asyncio
import websockets
from http.server import HTTPServer
async def sendMessageToWebPage(message : str) :
print(f"sendMessageToWebPage -- sending message::{message}::")
uri_ws_address = 'ws://localhost:5678'
async with websockets.connect(uri_ws_address) as web_socket :
await web_socket.send(message)
web_socket : WebSocketClientProtocol = await websockets.client.connect('ws://localhost:5678')
await web_socket.send(message)
await web_socket.close()
async def receiveOfMessage(websocket, path) :
counter : int = 0
async for message in websocket :
print(f"receiveOfMessage Server: Received Message::{message}::")
msg = message + " :: " + str(counter)
counter += 1
await sendMessageToWebPage(msg)
def StartLoop() :
HTTP_Server_Port : int = 8008
HTTP_Host_Address : str = "localhost"
WS_Server_Port : int = 8765
WS_Host_Address : str = "localhost"
ws_server = websockets.serve(receiveOfMessage, WS_Host_Address, WS_Server_Port)
print(f"Starting Web Socket Server on {WS_Host_Address}:{WS_Server_Port}")
ev_loop = asyncio.get_event_loop()
ev_loop.run_until_complete(ws_server)
ev_loop.run_forever()
if __name__ == '__main__' :
StartLoop()