From ef64649a2a4fe22a72dfdd2de96f1b1d5970c15e Mon Sep 17 00:00:00 2001 From: Sean Arietta Date: Thu, 25 Dec 2014 23:27:19 -0800 Subject: [PATCH] Added support for forcing websocket connections if available. Also fixed a small bug that seemed to be causing a race condition on first connections due to a failure to consume a packet on opening the default namespace --- socketIO_client/__init__.py | 12 +++++++++--- socketIO_client/transports.py | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 2b45c25..8188bec 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -138,11 +138,16 @@ class SocketIO(object): """ def __init__( - self, host, port=None, Namespace=BaseNamespace, - wait_for_connection=True, **kw): + self, host, + port = None, + Namespace = BaseNamespace, + wait_for_connection = True, + force_websockets_if_available = True, + **kw): self.is_secure, self.base_url = _parse_host(host, port) self.wait_for_connection = wait_for_connection self._namespace_by_path = {} + self.force_websockets_if_available = force_websockets_if_available; self.kw = kw self.__transport = None; @@ -161,6 +166,7 @@ class SocketIO(object): # This sets of a chain of events that attempts to connect to # the server at the base namespace. self.define(Namespace) + self._transport.connect(""); # Events that fail to emit due to connection errors will be # placed in this 'queue' and re-sent automatically upon @@ -497,7 +503,7 @@ class SocketIO(object): # synchronization to ensure buffers are flushed, etc. num_retries = 0; if "websocket" in self.session.server_supported_transports: - while num_retries < MAX_UPGRADE_RETRIES: + while num_retries < MAX_UPGRADE_RETRIES or self.force_websockets_if_available: try: transport = self._upgrade(); break; diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index f62e997..ad88ebb 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -61,6 +61,7 @@ class _AbstractTransport(object): self._packets.append(packet); else: self.send_packet(PacketType.OPEN, path, data); + self.recv().next(); def send_heartbeat(self): self.send_packet(PacketType.PING)