Small updates that fix a couple of connection issues

This commit is contained in:
Sean Arietta 2014-12-25 22:52:47 -08:00
commit 5af21af575
2 changed files with 11 additions and 5 deletions

View file

@ -161,7 +161,6 @@ class SocketIO(object):
# This sets of a chain of events that attempts to connect to # This sets of a chain of events that attempts to connect to
# the server at the base namespace. # the server at the base namespace.
self.define(Namespace) self.define(Namespace)
self._transport.connect("");
# Events that fail to emit due to connection errors will be # Events that fail to emit due to connection errors will be
# placed in this 'queue' and re-sent automatically upon # placed in this 'queue' and re-sent automatically upon
@ -430,6 +429,7 @@ class SocketIO(object):
""" """
websocket = transports.WebsocketTransport(self.session, self.is_secure, self.base_url, **self.kw); websocket = transports.WebsocketTransport(self.session, self.is_secure, self.base_url, **self.kw);
websocket.send_packet(PacketType.PING, "", "probe"); websocket.send_packet(PacketType.PING, "", "probe");
for packet in websocket.recv_packet(): for packet in websocket.recv_packet():
_log.debug("[websocket] Packet: %s" % str(packet)); _log.debug("[websocket] Packet: %s" % str(packet));
if packet.type == PacketType.PONG: if packet.type == PacketType.PONG:
@ -486,6 +486,11 @@ class SocketIO(object):
transport = transports.XHR_PollingTransport(self.session, self.is_secure, self.base_url, **self.kw); transport = transports.XHR_PollingTransport(self.session, self.is_secure, self.base_url, **self.kw);
transport.set_timeout(self.session.connection_timeout); transport.set_timeout(self.session.connection_timeout);
# Wait for the response that we connected.
packet = None;
while packet == None or packet.type != PacketType.MESSAGE or packet.payload.type != MessageType.CONNECT:
packet = transport.recv().next();
# If websocket is available, upgrade to it immediately. # If websocket is available, upgrade to it immediately.
# TODO(sean): We could run this on a separate thread for # TODO(sean): We could run this on a separate thread for
# maximum efficiency although that would require some # maximum efficiency although that would require some
@ -496,7 +501,7 @@ class SocketIO(object):
try: try:
transport = self._upgrade(); transport = self._upgrade();
break; break;
except: except Exception, e:
pass; pass;
time.sleep(1); time.sleep(1);
num_retries += 1; num_retries += 1;
@ -504,7 +509,7 @@ class SocketIO(object):
if num_retries == MAX_UPGRADE_RETRIES: if num_retries == MAX_UPGRADE_RETRIES:
_log.warn("[websocket] Failed to upgrade to websocket"); _log.warn("[websocket] Failed to upgrade to websocket");
# Update namespaces # Update namespaces
for path, namespace in self._namespace_by_path.items(): for path, namespace in self._namespace_by_path.items():
namespace._transport = transport namespace._transport = transport
transport.connect(path) transport.connect(path)

View file

@ -133,12 +133,13 @@ class WebsocketTransport(_AbstractTransport):
base_url, parser.ENGINEIO_PROTOCOL, socketIO_session.id) base_url, parser.ENGINEIO_PROTOCOL, socketIO_session.id)
try: try:
_log.debug("[websocket] Connecting"); _log.debug("[websocket] Connecting to: %s" % self._url);
self._connection = websocket.create_connection(self._url) self._connection = websocket.create_connection(self._url);
except socket.timeout as e: except socket.timeout as e:
raise ConnectionError(e) raise ConnectionError(e)
except socket.error as e: except socket.error as e:
raise ConnectionError(e) raise ConnectionError(e)
self._connection.settimeout(TIMEOUT_IN_SECONDS) self._connection.settimeout(TIMEOUT_IN_SECONDS)
@property @property