MCPcopy
hub / github.com/tornadoweb/tornado / __init__

Method __init__

tornado/websocket.py:1397–1457  ·  view source on GitHub ↗
(
        self,
        request: httpclient.HTTPRequest,
        on_message_callback: Optional[Callable[[Union[None, str, bytes]], None]] = None,
        compression_options: Optional[Dict[str, Any]] = None,
        ping_interval: Optional[float] = None,
        ping_timeout: Optional[float] = None,
        max_message_size: int = _default_max_message_size,
        subprotocols: Optional[List[str]] = None,
        resolver: Optional[Resolver] = None,
    )

Source from the content-addressed store, hash-verified

1395 protocol = None # type: WebSocketProtocol
1396
1397 def __init__(
1398 self,
1399 request: httpclient.HTTPRequest,
1400 on_message_callback: Optional[Callable[[Union[None, str, bytes]], None]] = None,
1401 compression_options: Optional[Dict[str, Any]] = None,
1402 ping_interval: Optional[float] = None,
1403 ping_timeout: Optional[float] = None,
1404 max_message_size: int = _default_max_message_size,
1405 subprotocols: Optional[List[str]] = None,
1406 resolver: Optional[Resolver] = None,
1407 ) -> None:
1408 self.connect_future = Future() # type: Future[WebSocketClientConnection]
1409 self.read_queue = Queue(1) # type: Queue[Union[None, str, bytes]]
1410 self.key = base64.b64encode(os.urandom(16))
1411 self._on_message_callback = on_message_callback
1412 self.close_code = None # type: Optional[int]
1413 self.close_reason = None # type: Optional[str]
1414 self.params = _WebSocketParams(
1415 ping_interval=ping_interval,
1416 ping_timeout=ping_timeout,
1417 max_message_size=max_message_size,
1418 compression_options=compression_options,
1419 )
1420
1421 scheme, sep, rest = request.url.partition(":")
1422 scheme = {"ws": "http", "wss": "https"}[scheme]
1423 request.url = scheme + sep + rest
1424 request.headers.update(
1425 {
1426 "Upgrade": "websocket",
1427 "Connection": "Upgrade",
1428 "Sec-WebSocket-Key": to_unicode(self.key),
1429 "Sec-WebSocket-Version": "13",
1430 }
1431 )
1432 if subprotocols is not None:
1433 request.headers["Sec-WebSocket-Protocol"] = ",".join(subprotocols)
1434 if compression_options is not None:
1435 # Always offer to let the server set our max_wbits (and even though
1436 # we don't offer it, we will accept a client_no_context_takeover
1437 # from the server).
1438 # TODO: set server parameters for deflate extension
1439 # if requested in self.compression_options.
1440 request.headers["Sec-WebSocket-Extensions"] = (
1441 "permessage-deflate; client_max_window_bits"
1442 )
1443
1444 # Websocket connection is currently unable to follow redirects
1445 request.follow_redirects = False
1446
1447 self.tcp_client = TCPClient(resolver=resolver)
1448 super().__init__(
1449 None,
1450 request,
1451 lambda: None,
1452 self._on_http_response,
1453 104857600,
1454 self.tcp_client,

Callers

nothing calls this directly

Calls 6

QueueClass · 0.90
to_unicodeFunction · 0.90
TCPClientClass · 0.90
_WebSocketParamsClass · 0.85
joinMethod · 0.80
__init__Method · 0.45

Tested by

no test coverage detected