簡體   English   中英

python-socketio 客戶端無法獲取公共數據,但 NodeJS socket.io-client 沒有

[英]python-socketio client fails to get public data but NodeJS socket.io-client does not

我正在嘗試從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 客戶端之間的主要區別在於命名空間的實現方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM