Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法将websocket数据流式传输到前端_Python_Callback_Flask Socketio - Fatal编程技术网

Python 无法将websocket数据流式传输到前端

Python 无法将websocket数据流式传输到前端,python,callback,flask-socketio,Python,Callback,Flask Socketio,我正试图通过股票经纪人(Zerodha)的websockets sdk将市场实时数据流到我的前端 我可以在python控制台中记录实时数据,但无法将其流式传输到前端 我是新的套接字编程,所以请原谅 下面是python代码片段 import json from flask import Flask, render_template, request, redirect, session import threading import time from kiteconnect import

我正试图通过股票经纪人(Zerodha)的websockets sdk将市场实时数据流到我的前端

我可以在python控制台中记录实时数据,但无法将其流式传输到前端

我是新的套接字编程,所以请原谅

下面是python代码片段

import json
from flask import Flask, render_template, request, redirect, session   
import threading
import time
from kiteconnect import KiteTicker #WebSocket client for connecting to Kite Connect's streaming quotes service.
import logging

###
from flask_socketio import SocketIO, emit
###
app = Flask(__name__)
##
socketio = SocketIO(app, async_mode= 'threading')
##
app.config['DEBUG'] = False


ticker = None
@app.route('/streamData')
def streamData():
    '''
    to start stream we first have to  
    1.) initiliase a WS connection - done
    2.) Subscribe/register the symbols - done
    3.) Check on new ticks - done
    4.) To do: kill the ws after x time
    '''
    global ticker
    
    accessToken = getAccessToken()
    ticker = KiteTicker("api key here", accessToken)#1

    # Assign the callbacks.
    ticker.on_connect = onConnectLocal
    ticker.on_close = onDisconnectLocal
    ticker.on_error = onErrorLocal
    ticker.on_ticks = onNewTicksLocal#3

    logging.info('Ticker: Going to connect..')
    ticker.connect(threaded=True)
    time.sleep(5)
    symbols = ['stock', 'names', 'given', 'here']
    tokens = []
    kite = getKite()
    fetchInstruments(kite)
    for symbol in symbols:
        isd = getInstrumentDataBySymbol(symbol)
        token = isd['instrument_token']
        logging.info('registerSymbol: %s token = %s', symbol, token)
    tokens.append(token)
    
    logging.info('Subscribing tokens %s', tokens)
    ticker.subscribe(tokens)#2
    print(tokens)
    return render_template('stream.html', async_mode='threading') # here is where I want to stream the data 
    
def onConnectLocal(ws, response):
    logging.info('Ticker connection successful.')

def onDisconnectLocal(ws, code, reason):
    logging.error('Ticker got disconnected. code = %d, reason = %s', code, reason)

def onErrorLocal(ws, code, reason):
    logging.error('Ticker errored out. code = %d, reason = %s', code, reason)

#@socketio.on('my_broadcast_event', namespace='/test')
def onNewTicksLocal(ws, ticks):#3 # this the method which streams data from the broker's websocket
    for tick in ticks:
        isd = getInstrumentDataByToken(tick['instrument_token']) 
        symbol = isd['tradingsymbol']
        logging.info('Tick: %s CMP = %f', symbol, tick['last_price']) #this prints to the python console with no problem
        socketio.emit('my_response',{'data': tick}, broadcast=True)# this makes the problem

app.run('localhost', 8080)
stream.html(前端)

但是正如你在上面看到的,我已经提供了这个(当我点击广播按钮时,我得到了这个错误)

请让我知道我哪里出了问题(我觉得,但不确定,我可能回拨出了问题)


编辑:-用python更新html代码和端口号

您似乎将股票经纪人的API与Socket.IO混合在一起。
onNewTicksLocal()
是针对股票经纪人的回调,它不需要是Socket.IO事件处理程序。我注释掉了@socketio.on('my_broadcast_event',namespace='/test'),它不会给出任何错误,但不会将任何数据流/显示到前端…您正在使用一个名为
/test
的命名空间。如果希望客户端接收事件,则必须在同一命名空间上发出。另外,您的客户端似乎没有
my\u响应
事件处理程序。@Miguel,很抱歉,我最初没有给出正确的html代码。我已经更新了这个问题。但是我仍然无法在控制台中获取任何数据。logOk,我让它工作了。在客户端,我只需要使用namespace='&数据流。
      <script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    <script type="text/javascript" charset="utf-8">
        $(document).ready(function() {

            namespace = 'http://localhost:8080/streamData';
            var socket = io(namespace);

            socket.on('connect', function() {
                socket.emit('my_event', {data: 'connected to the SocketServer...'});
            });

            socket.on('my_response', function(msg, cb) {
                $('#log').append('<br>' + $('<div/>').text('logs #' + msg.count + ': ' + msg.data).html());
                if (cb)
                    cb();
            });
            $('form#emit').submit(function(event) {
                socket.emit('my_event', {data: $('#emit_data').val()});
                return false;
            });
            $('form#broadcast').submit(function(event) {
                socket.emit('my_broadcast_event', {data: $('#broadcast_data').val()});
                return false;
            });
            $('form#disconnect').submit(function(event) {
                socket.emit('disconnect_request');
                return false;
            });

            socket.on('my_response', function(data){
            console.log(data.msg)
            socket.emit('my_response', {data: data.msg});

 });
        });

        

    </script>
TypeError: onNewTicksLocal() missing 1 required positional argument: 'ticks'