diff --git a/eel/__init__.py b/eel/__init__.py index 34fc7ce1..76f82938 100644 --- a/eel/__init__.py +++ b/eel/__init__.py @@ -527,13 +527,17 @@ def _safe_json(obj: Any) -> str: return jsn.dumps(obj, default=lambda o: None) +import gevent.lock +_ws_send_lock = gvt.lock.BoundedSemaphore(1) + def _repeated_send(ws: WebSocketT, msg: str) -> None: - for attempt in range(100): - try: - ws.send(msg) - break - except Exception: - sleep(0.001) + with _ws_send_lock: # ← 加这一行 + for attempt in range(100): + try: + ws.send(msg) + break + except Exception: + sleep(0.001) def _process_message(message: Dict[str, Any], ws: WebSocketT) -> None: diff --git a/eel/browsers.py b/eel/browsers.py index 183dd905..873a3720 100644 --- a/eel/browsers.py +++ b/eel/browsers.py @@ -33,7 +33,10 @@ def _build_url_from_string(page: str, options: OptionsDictT) -> str: if not isinstance(options['port'], (int, str)): raise TypeError("'port' option must be an integer") base_url = 'http://%s:%d/' % (options['host'], int(options['port'])) - return base_url + page + if "http" in page: + return page + else: + return base_url + page def _build_urls(start_pages: Iterable[Union[str, Dict[str, str]]], options: OptionsDictT) -> List[str]: diff --git a/eel/eel.js b/eel/eel.js index cc824206..8f8f3e10 100644 --- a/eel/eel.js +++ b/eel/eel.js @@ -1,5 +1,5 @@ eel = { - _host: window.location.origin, + _host: new URL(document.currentScript.src).origin, set_host: function (hostname) { eel._host = hostname diff --git a/examples/07 - CreateReactApp/eel_CRA.py b/examples/07 - CreateReactApp/eel_CRA.py index 504256c0..a8e256c9 100644 --- a/examples/07 - CreateReactApp/eel_CRA.py +++ b/examples/07 - CreateReactApp/eel_CRA.py @@ -61,6 +61,7 @@ def start_eel(develop): host='localhost', port=8080, size=(1280, 800), + shutdown_delay=60 # Prevent disconnect when webpack hot refresh ) try: eel.start(page, mode=app, **eel_kwargs)