PythonでWebSocketサーバーへの接続が失敗する
PythonでWebSocketサーバーを動かしているのですが、クライアントとの接続の確立がうまくいきません。
クライアント(Google Chrome)からWebSocketで受け取ったデータをノンブロッキングなUDPを使って他のアドレスへ転送したいです。
ただ、WebSocketのサーバーとクライアント間の接続がうまくいっていないようで、Chromeを見ると
WebSocket connection to wss://localhost:4246/ failed: Error in connection establishment: net::ERR_SOCKET_NOT_CONNECTED
というエラーが発生しています。
なぜ、接続がうまくいかないのでしょうか?
サーバーは下記のようになっていて、データを受信するとhandleMessageが呼ばれてデータの内容がprintで表示された後、udpで送るようになっています。
Chromeは-allow-insecure-localhost
が有効になっています。
このコードはsimple-websocket-server
を使っています。
from SimpleWebSocketServer import WebSocket, SimpleSSLWebSocketServer, SimpleWebSocketServer
import multiprocessing
import ssl
import signal
import sys
import socket
import os.path
class DataWebSocket(WebSocket):
def __init__(self, server, sock, address, tcp_sock):
super().__init__(server, sock, address)
self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.udp_sock.setblocking(False)
self.udp_sock.bind(("127.0.0.1", 6666))
def handleMessage(self):
while True:
self.udp_sock.sendto(("127.0.0.1", 7774), self.data)
print(self.data)
def handleClose(self):
print("connection: closed " + self.address)
self.conn_sock.close()
self.sendMessage("server exit")
sys.exit()
def handleConnected(self):
pass
def f():
def datawebsocketclasscaller(server, sock, address):
return DataWebSocket(server, sock, address)
return datasocketclasscaller
def start_data_receiver():
SSL = True
p = f()
if SSL:
server = SimpleSSLWebSocketServer("127.0.0.1", 4246, p, "../certs/server.crt", "../certs/server.key")
else:
server = SimpleWebSocketServer("127.0.0.1", 4246, p)
server.serveforever()
クライアント(Google Chrome):
const ws = new WebSocket("wss://localhost:4246");
const btn = document.querySelectorAll("button#btn1")[0];
btn.onclick = () => ws.send("Hello from button1");