2023-03-30 19:48:20 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
|
|
<head>
|
|
|
|
<title>WebSocket Client Test</title>
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<h1>WebSocket Client Test</h1>
|
|
|
|
<form action="#">
|
|
|
|
<input type="text" id="message" name="message" value="" placeholder="Send a message...">
|
|
|
|
<input type="submit" value="Submit">
|
|
|
|
</form>
|
|
|
|
<div id="log"></div>
|
|
|
|
</body>
|
|
|
|
<script language="javascript" type="text/javascript">
|
Update to hyper 1. Enable custom + unix listeners.
This commit completely rewrites Rocket's HTTP serving. In addition to
significant internal cleanup, this commit introduces the following major
features:
* Support for custom, external listeners in the `listener` module.
The new `listener` module contains new `Bindable`, `Listener`, and
`Connection` traits which enable composable, external
implementations of connection listeners. Rocket can launch on any
`Listener`, or anything that can be used to create a listener
(`Bindable`), via a new `launch_on()` method.
* Support for Unix domain socket listeners out of the box.
The default listener backwards compatibly supports listening on Unix
domain sockets. To do so, configure an `address` of
`unix:path/to/socket` and optional set `reuse` to `true` (the
default) or `false` which controls whether Rocket will handle
creating and deleting the unix domain socket.
In addition to these new features, this commit makes the following major
improvements:
* Rocket now depends on hyper 1.
* Rocket no longer depends on hyper to handle connections. This allows
us to handle more connection failure conditions which results in an
overall more robust server with fewer dependencies.
* Logic to work around hyper's inability to reference incoming request
data in the response results in a 15% performance improvement.
* `Client`s can be marked secure with `Client::{un}tracked_secure()`,
allowing Rocket to treat local connections as running under TLS.
* The `macros` feature of `tokio` is no longer used by Rocket itself.
Dependencies can take advantage of this reduction in compile-time
cost by disabling the new default feature `tokio-macros`.
* A new `TlsConfig::validate()` method allows checking a TLS config.
* New `TlsConfig::{certs,key}_reader()`,
`MtlsConfig::ca_certs_reader()` methods return `BufReader`s, which
allow reading the configured certs and key directly.
* A new `NamedFile::open_with()` constructor allows specifying
`OpenOptions`.
These improvements resulted in the following breaking changes:
* The MSRV is now 1.74.
* `hyper` is no longer exported from `rocket::http`.
* `IoHandler::io` takes `Box<Self>` instead of `Pin<Box<Self>>`.
- Use `Box::into_pin(self)` to recover the previous type.
* `Response::upgrade()` now returns an `&mut dyn IoHandler`, not
`Pin<& mut _>`.
* `Config::{address,port,tls,mtls}` methods have been removed.
- Use methods on `Rocket::endpoint()` instead.
* `TlsConfig` was moved to `tls::TlsConfig`.
* `MutualTls` was renamed and moved to `mtls::MtlsConfig`.
* `ErrorKind::TlsBind` was removed.
* The second field of `ErrorKind::Shutdown` was removed.
* `{Local}Request::{set_}remote()` methods take/return an `Endpoint`.
* `Client::new()` was removed; it was previously deprecated.
Internally, the following major changes were made:
* A new `async_bound` attribute macro was introduced to allow setting
bounds on futures returned by `async fn`s in traits while
maintaining good docs.
* All utility functionality was moved to a new `util` module.
Resolves #2671.
Resolves #1070.
2023-12-19 22:32:11 +00:00
|
|
|
var wsUri = "ws://127.0.0.1:8000/echo?raw";
|
2023-03-30 19:48:20 +00:00
|
|
|
var log;
|
|
|
|
|
|
|
|
function init() {
|
|
|
|
log = document.getElementById("log");
|
|
|
|
form = document.getElementsByTagName("form")[0];
|
|
|
|
message = document.getElementById("message");
|
|
|
|
|
|
|
|
testWebSocket();
|
|
|
|
|
|
|
|
form.addEventListener("submit", (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
if (message.value !== "") {
|
|
|
|
sendMessage(message.value);
|
|
|
|
message.value = "";
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function testWebSocket() {
|
|
|
|
websocket = new WebSocket(wsUri);
|
|
|
|
websocket.onopen = onOpen;
|
|
|
|
websocket.onclose = onClose;
|
|
|
|
websocket.onmessage = onMessage;
|
|
|
|
websocket.onerror = onError;
|
|
|
|
}
|
|
|
|
|
|
|
|
function onOpen(evt) {
|
|
|
|
writeLog("CONNECTED");
|
|
|
|
sendMessage("Hello, Rocket!");
|
|
|
|
}
|
|
|
|
|
|
|
|
function onClose(evt) {
|
|
|
|
writeLog("Websocket DISCONNECTED");
|
|
|
|
}
|
|
|
|
|
|
|
|
function onMessage(evt) {
|
|
|
|
writeLog('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
|
|
|
|
}
|
|
|
|
|
|
|
|
function onError(evt) {
|
|
|
|
writeLog('<span style="color: red;">ERROR:</span> ' + evt.data);
|
|
|
|
}
|
|
|
|
|
|
|
|
function sendMessage(message) {
|
|
|
|
writeLog("SENT: " + message);
|
|
|
|
websocket.send(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
function writeLog(message) {
|
|
|
|
var pre = document.createElement("p");
|
|
|
|
pre.innerHTML = message;
|
|
|
|
log.prepend(pre);
|
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener("load", init, false);
|
|
|
|
</script>
|
|
|
|
</html>
|