我想要实现的目标: 获取某些加密货币的当前价格并将其打印在一个简单的 HTML/JavaScript 前端。该应用将无限期地继续这样做。
我一直在尝试的内容:我一直在尝试构建一个 Python Flask 服务器来从 Binance websocket 获取货币,并使用 websocket 将它们发送到前端。
到目前为止我得到了什么:前端将第一条消息发送到后端,但没有收到响应。此外,我可以获得货币的价格,但服务器不会将它们发送到前端。
我需要什么:一些新的观点来指导我找到解决方案(当然:-))
一些想法:
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Synchronized Slider</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>
</head>
<body>
<div class="container text-center">
<h1 >Tradings...</h1>
</div>
<script>
$(document).ready(function(){
var socket = io('ws://localhost:5000');
socket.on('connect', function() {
socket.emit(
'front_msg', {data: 'Trying to connect...'});
});
socket.on('back_msg', function(msg) {
console.log(JSON.stringify(msg))
});
socket.on('binance_msg', function(msg) {
console.log(JSON.stringify(msg))
});
});
</script>
</body>
</html>
Flask 服务器
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import threading
import websocket
import json
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, cors_allowed_origins="*")
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('connect')
def test_connect():
emit('back_msg', {'data': 'Connected.'})
@socketio.on('disconnect')
def test_disconnect():
print('Disconnect.')
@socketio.on('front_msg')
def handle_front_msg(json):
print('handle_front_change: ' + str(json))
json['data'] = 'changed'
emit('back_msg', json)
def on_message(ws, message):
json_message = json.loads(message)
crypto = json_message['s']
value = json_message['p']
print(f'{crypto}:{value}')
emit('binance_msg', {'crypto':crypto, 'value':value})
def binance_websocket():
socket = 'wss://stream.binance.com:9443/ws'
currencies = ['btc', 'eth', 'axs']
for currency in currencies:
socket += f"/{currency}usdt@trade"
ws = websocket.WebSocketApp(socket, on_message=on_message)
ws.run_forever()
if __name__ == '__main__':
binance_thread = threading.Thread(target=binance_websocket)
binance_thread.start()
socketio.run(app, debug=True)