Tout d'abord, je ne sais pas pourquoi certains de vos serveurs Socket.IO ne prennent pas en charge les websockets... L'objectif de Socket.IO est de faciliter le développement d'applications Web dans le navigateur frontal en fournissant une interface abstraite aux flux de données en temps réel servis par le serveur Socket.IO. Peut-être que Socket.IO n'est pas ce que vous devriez utiliser pour votre application ? Ceci mis à part, laissez-moi essayer de répondre à votre question...
À l'heure actuelle, il n'existe pas de bibliothèque client Socket.IO pour Python (gevent-socketio n'est pas une bibliothèque Socket.IO). client pour Python... c'est une bibliothèque Socket.IO serveur pour Python). Pour l'instant, vous allez devoir composer un code original afin de vous interfacer directement avec Socket.IO en tant que client tout en acceptant différents types de connexion.
Je sais que vous cherchez une panacée qui fonctionne avec différents types de connexion (WebSocket, long-polling, etc.), mais comme une telle bibliothèque n'existe pas encore, je peux au moins vous donner quelques conseils sur l'utilisation du type de connexion WebSocket en me basant sur mon expérience.
Pour le type de connexion WebSocket, créez un client WebSocket en Python. À partir de la ligne de commande, installez ce paquetage Python WebSocket Client aquí avec pip pour qu'il soit sur votre chemin python comme ceci :
pip install -e git+https://github.com/liris/websocket-client.git#egg=websocket
Une fois que vous avez fait cela, essayez ce qui suit, en remplaçant SOCKET_IO_HOST
y SOCKET_IO_PORT
avec l'emplacement approprié de votre serveur Socket.IO :
import websocket
SOCKET_IO_HOST = "127.0.0.1"
SOCKET_IO_PORT = 8080
socket_io_url = 'ws://' + SOCKET_IO_HOST + ':' + str(SOCKET_IO_PORT) + '/socket.io/websocket'
ws = websocket.create_connection(socket_io_url)
À ce stade, vous disposez d'un moyen d'interagir avec un serveur Socket.IO directement depuis Python. Pour envoyer des messages au serveur Socket.IO, il suffit d'envoyer un message via cette connexion WebSocket. Pour que le serveur Socket.IO interprète correctement les messages entrants de votre client Python Socket.IO via cette WebSocket, vous devez respecter le protocole Socket.IO et coder toutes les chaînes ou dictionnaires que vous pourriez envoyer via la connexion WebSocket. Par exemple, après avoir accompli tout ce qui précède, faites ce qui suit :
def encode_for_socketio(message):
"""
Encode 'message' string or dictionary to be able
to be transported via a Python WebSocket client to
a Socket.IO server (which is capable of receiving
WebSocket communications). This method taken from
gevent-socketio.
"""
MSG_FRAME = "~m~"
HEARTBEAT_FRAME = "~h~"
JSON_FRAME = "~j~"
if isinstance(message, basestring):
encoded_msg = message
elif isinstance(message, (object, dict)):
return encode_for_socketio(JSON_FRAME + json.dumps(message))
else:
raise ValueError("Can't encode message.")
return MSG_FRAME + str(len(encoded_msg)) + MSG_FRAME + encoded_msg
msg = "Hello, world!"
msg = encode_for_socketio(msg)
ws.send(msg)