python-socketio 客户端无法获取公共数据,但 NodeJS socket.io-client 没有
Posted
技术标签:
【中文标题】python-socketio 客户端无法获取公共数据,但 NodeJS socket.io-client 没有【英文标题】:python-socketio client fails to get public data but NodeJS socket.io-client does not 【发布时间】:2020-05-24 17:57:24 【问题描述】:我正在尝试从 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 上运行了这两个程序。
【问题讨论】:
【参考方案1】:您没有正确翻译 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 客户端的主要区别在于命名空间的实现方式。
【讨论】:
以上是关于python-socketio 客户端无法获取公共数据,但 NodeJS socket.io-client 没有的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Android 应用程序连接到 python-socketio 后端?