你好,我有一个 python 的服务器代码和一个 js 的 web 客户端。我正在尝试使用安全的 websocket。但我不能让他们联系起来。我在这里错过了一些配置吗?是因为我在做ssl吗?因为我被要求使用安全的 websocket 所以我必须添加它。 我的服务器代码:
import asyncio, websockets, functools, ssl, logging
from dotenv import dotenv_values
from server_func import handle_question_wrapper
import nest_asyncio
nest_asyncio.apply()
def initialize():
config = dotenv_values("../.env")
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain("../server.crt", "../server.key")
config["ssl_context"] = ssl_context
return config
async def run(config):
start_server = websockets.serve(
functools.partial(handle_question_wrapper, config=config),
"localhost",
443,
ssl=config["ssl_context"],
ping_interval=None
)
start_server.ws_server.check_origin = True
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
if __name__ == "__main__":
logger = logging.getLogger("websocket_server")
logging.basicConfig(
format="%(asctime)s %(levelname)-8s %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S"
)
config = initialize()
asyncio.run(run(config))
我的网络客户端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Websocket Client</title>
<script>
var ws;
function connect() {
ws = new WebSocket("wss://127.0.0.1:443");
ws.onopen = function () {
console.log("Websocket connected!");
};
ws.onmessage = function (event) {
console.log("Received message: ", event.data);
};
}
function sendMessage() {
var message = document.getElementById("message").value;
ws.send(message);
console.log("Sent message: ", message);
}
</script>
</head>
<body onload="connect()">
<input type="text" id="message" />
<button onclick="sendMessage()">Send</button>
</body>
</html>
你介意给点建议吗?