Comments (8)
Most users don't want to mess with TLS at all, they just want to call connect_async("wss://foo.bar.com:443/socket") or something like that. We should not force them to deal with TCP and TLS internals. Yes, it may be a separate crate, but there is virtually no web without TLS in the XXI century. For those who does not want TLS here it may be just feature-gated.
from tokio-tungstenite.
tokio-tungstenite
will not use TLS unless the stream which you pass to the client_async()
is already a TLS stream. In other words, if you want to have a TLS you have to use tokio-tls
crate in conjunction with tokio-core
's TcpStream
. Here is a good example how you can TcpStream
and tokio-tls
together: https://tokio.rs/docs/getting-started/tls/
from tokio-tungstenite.
Here is one more example: snapview/tungstenite-rs#1 (comment)
from tokio-tungstenite.
Thanks.
from tokio-tungstenite.
I used:
use native_tls::TlsConnector;
use tokio_tls::TlsConnectorExt;
let host = url.host_str().unwrap();
let tcp = TcpStream::connect(&url.to_socket_addrs().unwrap().next().unwrap(), &handle);
let tls_handshake = tcp.and_then(|socket| {
TlsConnector::builder().unwrap().build().unwrap().connect_async(host, socket).map_err(|e| io::Error::new(io::ErrorKind::Other, e))
});
let client = tls_handshake.and_then(|stream| {
from tokio-tungstenite.
Yeah, something like this. And after TLS handshake is completed, you can start the WebSocket handshake by using tokio_tungstenite::client_async()
on the stream
.
from tokio-tungstenite.
I think it is to be supported in tokio-tungstenite as well. If the client just has an URL, it must be enough to connect.
from tokio-tungstenite.
It depends, we have to think on how to do it properly. Turning the Stream
into a TlsStream
when the URL contains wss
may not be a desired behavior in several cases, especially if the user performs an upgrade of the existing connection which may already contain TLS stream inside.
We could solved the issue by having 2 client functions: client_async(url, stream)
(like we do it now) and client_connect(url)
(which does not take a stream
parameter and so we create a stream ourselves), but this would add an additional dependency on TLS crate(s). In general having this function would not be a big benefit for those ones who are familiar with tokio and building services with it (our current stream-based implementation is easily composable with tokio).
Another important thing we have to keep in mind is that we have to remain consistent with the way how such things are handled in tokio-related crates, otherwise it will be confusing for tokio users. I've just had a short look at hyper
, they have a tokio support and hyper
itself does not depend on any of the TLS crates, in other words it does not handle https
in a special way. HTTPS along with TLS dependency resides in a separate hyper-tls
repository, which contains only the TLS connector for hyper
in case if for some reasons a user wants to use it with hyper. Maybe this is the approach we have to follow.
So we have to consider those factors (note: in either case it would save ~3-5 LOC and for the most cases it does not give any significant advantages).
from tokio-tungstenite.
Related Issues (20)
- Passing body in `connect`? HOT 2
- Can we provided a way to keep the original header name case. HOT 1
- 403 Forbidden HOT 1
- "WebSocket protocol error: httparse error: invalid token" when connect from ngrok tcp tunnel. HOT 5
- Is it possible to bind client to specific interface? HOT 1
- 没有连接断开时,直接检测客户端的状态的api,以实现重新连接,这在其它语言中都是常见的
- Performance boost implementing `poll_write_vectored` and rustls 0.23 HOT 2
- Is MaybeTlsStream supposed to work for servers too? HOT 2
- 0.20 and 0.21 break something HOT 25
- Vectorized send HOT 2
- new rustls 0.23.x is incompatible with the 0.22.x used by tokio-tungstenite HOT 2
- Adding authorization header leads in infinite block of connect_async HOT 2
- How to correctly handle large messages HOT 1
- How can I send pong frames as heartbeats from a client? HOT 4
- Specify default-features = false for rustls in Cargo.toml
- Websocket missing some ping messages. HOT 2
- tokio-tungstenite not using version 0.22 of tungstenite HOT 1
- no process-level CryptoProvider available -- call CryptoProvider::install_default() before this point HOT 5
- No option to enable `url` flag on `tungstenite` HOT 1
- How to reply to the client and send a message if an error occures on `accept_async` funtion. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tokio-tungstenite.