cloudflare / cloudflare/workers-rs

[BUG] Using websocket error :The script will never generate a response.

Open
#407 1 comment 0 reactions 0 assignees View on GitHub
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

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.