Comfy-Org / Comfy-Org/ComfyUI

custom nodes with in PromptServer.instance.routes for connect websocket does'nt work

Open
#5,054 0 comments 0 reactions 0 assignees View on GitHub
Potential Bug
Dominant language
Python
Stars
133k
Forks
15.7k
Avg merge
1d 7h
Merged PRs (30d)
158

Description

### Expected Behavior

**ComfyUI startup command**
*python main.py --port=6006*
**started logs**
```Python
Total VRAM 24210 MB, total RAM 1031718 MB
pytorch version: 2.4.1+cu121
Set vram state to: NORMAL_VRAM
Device: cuda:0 NVIDIA GeForce RTX 4090 D : cudaMallocAsync
Using pytorch cross attention
[Prompt Server] web root: /root/autodl-tmp/ComfyUI/web
/root/miniconda3/lib/python3.10/site-packages/kornia/feature/lightglue.py:44: FutureWarning: `torch.cuda.amp.custom_fwd(args...)` is deprecated. Please use `torch.amp.custom_fwd(args..., device_type='cuda')` instead.
@torch.cuda.amp.custom_fwd(cast_inputs=torch.float32)

Import times for custom nodes:
0.0 seconds: /root/autodl-tmp/ComfyUI/custom_nodes/websocket_image_save.py
0.0 seconds: /root/autodl-tmp/ComfyUI/custom_nodes/Test

Starting server
To see the GUI go to: http://127.0.0.1:6006/
```
**test code for PromptServer↓↓↓**
```Python
@PromptServer.instance.routes.get("/ws_test")
async def get_hello(request):
server_address = "127.0.0.1:6006"
client_id = str(uuid.uuid4())
socket_url = "ws://{}/ws?clientId={}".format(server_address, client_id)
print(socket_url)
ws = websocket.WebSocket()
ws.connect(socket_url)
while True:
out = ws.recv()
if isinstance(out, str):
message = json.loads(out)
print(message)
ws.close()
return web.json_response("hello world!")
```
**from the logs,the websocket won't response,and timeout!**
```Python
ws://127.0.0.1:6006/ws?clientId=0c5db1b9-db47-4f10-89dd-c5e8f4d7dc38
Error handling request
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_socket.py", line 118, in recv
bytes_ = _recv()
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_socket.py", line 97, in _recv
return sock.recv(bufsize)
TimeoutError: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_protocol.py", line 462, in _handle_request
resp = await request_handler(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_app.py", line 537, in _handle
resp = await handler(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
File "/root/autodl-tmp/ComfyUI/server.py", line 63, in cache_control
response: web.Response = await handler(request)
File "/root/autodl-tmp/ComfyUI/server.py", line 141, in origin_only_middleware
response = await handler(request)
File "/root/autodl-tmp/ComfyUI/custom_nodes/WMAIS/api.py", line 75, in get_hello
ws.connect(socket_url,timeout=20)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_core.py", line 261, in connect
self.handshake_response = handshake(self.sock, url, *addrs, **options)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_handshake.py", line 65, in handshake
status, resp = _get_resp_headers(sock)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_handshake.py", line 141, in _get_resp_headers
status, resp_headers, status_message = read_headers(sock)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_http.py", line 351, in read_headers
line = recv_line(sock)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_socket.py", line 140, in recv_line
c = recv(sock, 1)
File "/root/miniconda3/lib/python3.10/site-packages/websocket/_socket.py", line 120, in recv
raise WebSocketTimeoutException("Connection timed out")
websocket._exceptions.WebSocketTimeoutException: Connection timed out
Error handling request
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_protocol.py", line 462, in _handle_request
resp = await request_handler(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_app.py", line 537, in _handle
resp = await handler(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
File "/root/autodl-tmp/ComfyUI/server.py", line 63, in cache_control
response: web.Response = await handler(request)
File "/root/autodl-tmp/ComfyUI/server.py", line 141, in origin_only_middleware
response = await handler(request)
File "/root/autodl-tmp/ComfyUI/server.py", line 189, in websocket_handler
await ws.prepare(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_ws.py", line 204, in prepare
payload_writer = await super().prepare(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_response.py", line 418, in prepare
return await self._start(request)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_response.py", line 426, in _start
await self._write_headers()
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/web_response.py", line 506, in _write_headers
await writer.write_headers(status_line, self._headers)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/http_writer.py", line 130, in write_headers
self._write(buf)
File "/root/miniconda3/lib/python3.10/site-packages/aiohttp/http_writer.py", line 75, in _write
raise ConnectionResetError("Cannot write to closing transport")
ConnectionResetError: Cannot write to closing transport
```
**The correct log is as follows**
```Python
ws://127.0.0.1:6006/ws?clientId=0c5db1b9-db47-4f10-89dd-c5e8f4d7dc38
{'type': 'status', 'data': {'status': {'exec_info': {'queue_remaining': 0}}, 'sid': '0c5db1b9-db47-4f10-89dd-c5e8f4d7dc38'}}
```

### Actual Behavior

reference the Expected Behavior

### Steps to Reproduce

reference the Expected Behavior

### Debug Logs

```powershell
reference the Expected Behavior
```

### Other

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.