1
0
Эх сурвалжийг харах

allow configuration of socket.io transport options
because fly.io requires a header to find the right instance
which is only supported by browsers with polling, not websockets

Rodja Trappe 1 жил өмнө
parent
commit
1a593764c7

+ 2 - 0
main.py

@@ -63,6 +63,8 @@ async def redirect_reference_to_documentation(request: Request,
 fly_instance_id = os.environ.get('FLY_ALLOC_ID', '').split('-')[0]
 if fly_instance_id:
     nicegui_globals.socket_io_js_extra_headers['fly-force-instance-id'] = fly_instance_id
+    # NOTE polling is required for fly.io to use the force-instance header
+    nicegui_globals.socket_io_js_transports = ['polling']
 
 
 def add_head_html() -> None:

+ 1 - 0
nicegui/client.py

@@ -90,6 +90,7 @@ class Client:
             'prefix': prefix,
             'tailwind': globals.tailwind,
             'socket_io_js_extra_headers': globals.socket_io_js_extra_headers,
+            'socket_io_js_transports': globals.socket_io_js_transports,
         }, status_code, {'Cache-Control': 'no-store', 'X-NiceGUI-Content': 'page'})
 
     async def connected(self, timeout: float = 3.0, check_interval: float = 0.1) -> None:

+ 1 - 0
nicegui/globals.py

@@ -45,6 +45,7 @@ binding_refresh_interval: float
 tailwind: bool
 air: Optional['Air'] = None
 socket_io_js_extra_headers: Dict = {}
+socket_io_js_transports: List = ['websocket', 'polling']
 
 _socket_id: Optional[str] = None
 slot_stacks: Dict[int, List['Slot']] = {}

+ 1 - 1
nicegui/templates/index.html

@@ -216,7 +216,7 @@
           const query = { client_id: "{{ client_id }}" };
           const url = window.location.protocol === 'https:' ? 'wss://' : 'ws://' + window.location.host;
           const extraHeaders = {{ socket_io_js_extra_headers | safe }};
-          const transports = ['websocket', 'polling'];
+          const transports = {{ socket_io_js_transports | safe }};
           window.path_prefix = "{{ prefix | safe }}";
           window.socket = io(url, { path: "{{ prefix | safe }}/_nicegui_ws/socket.io", query, extraHeaders, transports });
           const messageHandlers = {