socketIO-client – RuntimeError:超过最大recursion深度

我正在尝试使用socket.io与python侧的socketIO-client 0.5.1库进行node.js应用程序和python之间的通信。 下面是两个代码块:

var http = require('http').createServer(); http.listen(6000); var io = require('socket.io').listen(http, { log: false }); var events = require('events'); var eventEmitter = new events.EventEmitter(); var counter = 0; io.sockets.on('connection', function (socket) { eventEmitter.on('observe', function(message){ socket.emit('sendVoltage', {}); }); socket.on('voltage', function (data) { console.log(counter + " - " + data.voltage); if (counter++ < 500) { eventEmitter.emit('observe', ''); } }); eventEmitter.emit('observe', ''); }); 

 #!/usr/bin/python import time, signal, sys from Adafruit_ADS1x15 import ADS1x15 from socketIO_client import SocketIO ADS1115 = 0x01 # 16-bit ADC adc = ADS1x15(ic=ADS1115) socketIO = SocketIO('chair01', 6000) def on_voltage_response(*args): print 'on_voltage_response', args def on_sendVoltage(*args): voltage = adc.readADCSingleEnded(0, 4096, 250) / 1000 print "Emitting voltage" socketIO.emit('voltage', {'voltage': voltage}, on_voltage_response) socketIO.wait_for_callbacks(seconds=1) print "Voltage emitted" socketIO.on('sendVoltage', on_sendVoltage) socketIO.wait(seconds=1) 

sendVoltage消息被检测到时, on_sendVoltage函数被执行,电压信息被发射,但是控制永远不会从发射返回。 下一个消息进来,下一个等,从来没有回报。 在某个时候,它会因为recursion调用太多而死亡。

我究竟做错了什么 ?

您在on_sendVoltage函数中调用socketIO.wait_for_callbacks()。 你的主要应该是这样的:

 state = 'waiting' while state == 'waiting': self.socket.wait(seconds=1) 

这将保持Python运行永久等待,但你的callback仍然会运行。 如果你想做别的事情,你可以在你的callback中改变状态。