cloudflare / cloudflare/workers-rs
[BUG] Using websocket error :The script will never generate a response.
- Dominant language
- Rust
- Stars
- 3.7k
- Forks
- 429
- Avg merge
- 20h 28m
- Merged PRs (30d)
- 7
Description
### Is there an existing issue for this?
- [X] I have searched the existing issues
### What version of `workers-rs` are you using?
0.0.18
### What version of `wrangler` are you using?
3.5.1
### Describe the bug
I am testing websocket with the following code
```rust
use futures_util::StreamExt;
use worker::*;
async fn index(_: Request, _: RouteContext) -> Result {
Response::from_html(INDEX_HTML)
}
async fn websocket(_req: Request, _: RouteContext) -> Result {
let pair = WebSocketPair::new()?;
let server = pair.server;
server.accept()?;
wasm_bindgen_futures::spawn_local(async move {
let mut event_stream = server.events().expect("could not open stream");
while let Some(data)=event_stream.next().await {
let event=data.unwrap();
let _ = match event {
WebsocketEvent::Message(msg) => server.send(&msg.text().unwrap()),
WebsocketEvent::Close(close) => {
server.close(Some(close.code()), Some(close.reason()))
},
};
}
});
Response::from_websocket(pair.client)
}
#[event(fetch)]
async fn main(req: Request, env: Env, _ctx: Context) -> Result {
let router = Router::new();
router
.on_async("/", index)
.on_async("/chat", websocket)
.run(req, env)
.await
}
static INDEX_HTML: &str = r#"
WS Chat
WS Chat
Connecting...
Submit
const chat = document.getElementById('chat');
const msg = document.getElementById('msg');
const submit = document.getElementById('submit');
const ws = new WebSocket(`ws://${location.host}/chat`);
ws.onopen = function() {
chat.innerHTML = '<p><em>Connected!</em></p>';
};
ws.onmessage = function(msg) {
showMessage(msg.data);
};
ws.onclose = function() {
chat.getElementsByTagName('em')[0].innerText = 'Disconnected!';
};
submit.onclick = function() {
const msg = text.value;
ws.send(msg);
text.value = '';
showMessage('<You>: ' + msg);
};
function showMessage(data) {
const line = document.createElement('p');
line.innerText = data;
chat.appendChild(line);
}
"#;
```
### Steps To Reproduce
1、npm run dev
2、open a browser and access
3、send message
4、close browser
5、error:
workerd/server/server.c++:2528: error: Uncaught exception: kj/compat/http.c++:3910: disconnected: worker_do_not_log; Request failed due to internal error
stack: 0 0 7ff79f51dc1a 0 0 0 7ff79f51dbcd 0 0 0
Contributor guide
Assessment
This issue has not been assessed yet.