我正在尝试创建从 Brython 到运行 Flask 和 Flask-SocketIO 的本地服务器的 Websocket 连接。Brython 代码可以连接到 Websocket 回显服务器,但在尝试使用本地服务器时失败,错误代码为“失败:WebSocket 握手期间出错:意外响应代码:200”
在客户端(使用 Brython):
def open_connection(event):
global ws
if not websocket.supported:
alert("WebSocket is not supported by your browser")
return
# open a web socket
# wss is websocket over SSL, ws is unencrypted
ws = websocket.WebSocket('ws://192.168.9.121:3000/message')
#ws = websocket.WebSocket("wss://echo.websocket.org")
print(ws)
# bind functions to web socket events
ws.bind('open', on_open)
ws.bind('message', on_message)
ws.bind('close', on_close)
在服务器端:
--- IMPORTS ---
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
# --- CONSTANTS ---
HOST = '0.0.0.0'
PORT = 3000
# --- GLOBALS ---
app = Flask(__name__)
app.config['SECRET_KEY'] = 'xxxxxxx'
socketio = SocketIO(app)
# --- ROUTES ---
@app.route('/')
def index():
return render_template('index.html')
@app.route('/message')
def message():
return render_template('message.html')
# --- SOCKETS ---
@socketio.on('connect')
def connect():
print('Connected')
emit('broadcast', {'data': 'Connected'}, broadcast=True)
@socketio.on('disconnect')
def disconnect():
print('Disconnected')
emit('broadcast', {'data': 'Disconnected'}, broadcast=True)
@socketio.on('message')
def handle_message(message):
emit('broadcast', {'data': message['data']}, broadcast=True)
@socketio.on_error()
def error(e):
print('Error', e)
# --- MAIN ---
if __name__ == '__main__':
# app.run(host=HOST, port=PORT)
print('Connecting - ', HOST, ':', PORT)
socketio.run(app, host=HOST, port=PORT)
尝试连接时出现的错误代码是:brython.js:8666 WebSocket connection to 'ws://192.168.9.121:3000/message' failed: Error during WebSocket handshake: Unexpected response code: 200