我的SocketIO脚本总是发送相同的数据

时间:2018-11-24 12:50:53

标签: javascript python socket.io

我有一个名为tst的Python变量,它等于2。我想使用SocketIO将这个变量的值发送到我的前端。

代码正在运行,唯一的问题是,每次发送更新时,它都将用two填充数组,而不是在我的javascript数组中存储单个2。 javascript数组应该看起来像这样[2](我将发送其他值,这只是一个测试),但是看起来像这样

[2, 2, 2, 2, 2, 2, ........ 2]

有没有办法解决这个问题?

SocketIO:

 class RandomThread(Thread):
        def __init__(self):
            self.delay = 1
            super(RandomThread, self).__init__()

        def randomNumberGenerator(self):
            """
            Generate a random number every 1 second and emit to a socketio instance (broadcast)
            Ideally to be run in a separate thread?
            """
            #infinite loop of magical random numbers
            print("Making random numbers")
            while not thread_stop_event.isSet():
                number = round(random()*10, 3)

                tst = 2

                print(number)
                socketio.emit('newnumber', {'number': number}, namespace='/test')

                socketio.emit('two', {'num': tst}, namespace='/test')

                sleep(self.delay)



        def run(self):
            self.randomNumberGenerator()

application.js

socket.on('two', function(msg) {
console.log("Received" + msg.num);

arr.push(msg.num)

console.log(arr);
});

1 个答案:

答案 0 :(得分:1)

您的数组正在填充,因为您的Python代码在循环中发送了那两个,而您的客户端代码将其附加(pushes)到数组中。您必须清除数组或在函数范围内对其进行定义。但是我不知道为什么要在数组中使用单个数字。如果您希望每秒从服务器获得一个随机数,那么一个变量就足够了。另一方面,如果您需要一个随机数数组,则最好在服务器端准备它,然后通过套接字发送整个内容。我感觉是XY problem