Home > database >  How to deploy and interact with a rust websocket?
How to deploy and interact with a rust websocket?

Time:06-13

I'm a beginner in Rust and WebSockets and I'm trying to deploy on Heroku a little chat backend I wrote (everything works on localhost). The build went well and I can see the app is running, and I'm now trying to connect to the WebSocket from a local HTML/Javascript frontend, but it is not working.

Here is my code creating the WebSocket on my rust server on Heroku (using the tungstenite WebSocket crate):

async fn main() -> Result<(), IoError> {

    let port = env::var("PORT").unwrap_or_else(|_| "8080".to_string());
    let addr = format!("0.0.0.0:{}", port);

    // Create the event loop and TCP listener we'll accept connections on.
    let try_socket = TcpListener::bind(&addr).await;
    let listener = try_socket.expect("Failed to bind");
    println!("Listening on: {}", addr);

and here is the code in my Javascript file that tries to connect to that WebSocket:

var ws = new WebSocket("wss://https://myappname.herokuapp.com/");

My web client gets the following error in the console:

WebSocket connection to 'wss://https//rocky-wave-51234.herokuapp.com/' failed

I searched to find the answer to my issue but unfortunately didn't find a fix so far. I've found hints that I might have to create an HTTP server first in my backend and then upgrade it to a WebSocket, but I can't find a resource on how to do that and don't even know if this is in fact the answer to my problem. Help would be greatly appreciated, thanks!

CodePudding user response:

I think your mistake is the URL you use:

"wss://https://myappname.herokuapp.com/"

A URL usually starts with <protocol>://. The relevant protocols here are:

  • http - unencrypted hypertext
  • https - encrypted hypertext
  • ws - unencrypted websocket
  • wss - encrypted websocket

So if your URL is an encrypted websocket, it should start only with wss://, a connection cannot have multiple protocols at once:

"wss://myappname.herokuapp.com/"
  • Related