我正在尝试从https://www.paymium.com/public下载公开可用的数据。数据提供者在其站点上提供了有关如何使用NodeJS访问数据的示例。以下程序有效。
var io = require('socket.io-client');
var socket = io.connect('https://www.paymium.com/public', {
path: '/ws/socket.io'
});
console.log('CONNECTING');
socket.on('connect', function() {
console.log('CONNECTED');
console.log('WAITING FOR DATA...');
});
socket.on('disconnect', function() {
console.log('DISCONNECTED');
});
socket.on('stream', function(publicData) {
console.log('GOT DATA:');
console.log(publicData);
});
我使用python-socketio实现了这个“等效”程序,但是它不起作用。
import socketio
sio = socketio.Client(logger=True, engineio_logger=True)
@sio.event
def stream(publicData):
print('GOT DATA:')
print(publicData)
@sio.event
def connect():
print("CONNECTED")
print('WAITING FO DATA...')
@sio.event
def disconnect():
print("DISCONNECTED")
print('CONNECTING')
sio.connect('https://www.paymium.com/public', socketio_path='/ws/socket.io')
sio.wait()
在我的python等效程序中缺少什么参数,回调或名称空间声明?
[我使用npm socket.io-client 2.3.0,python 3.7.6和python-socketio 4.6.0在macOS Catalina 10.15.4上运行了两个程序。
您尚未对JavaScript客户端进行正确的翻译。这是有效的Python客户端代码:
import socketio
sio = socketio.Client(logger=True, engineio_logger=True)
@sio.event(namespace='/public')
def stream(publicData):
print('GOT DATA:')
print(publicData)
@sio.event(namespace='/public')
def connect():
print("CONNECTED")
print('WAITING FO DATA...')
@sio.event(namespace='/public')
def disconnect():
print("DISCONNECTED")
print('CONNECTING')
sio.connect('https://www.paymium.com', namespaces=['/public'], socketio_path='/ws/socket.io')
sio.wait()
JS和Python客户端之间的主要区别在于名称空间的实现方式。