WebSockets issue connecting to Node Express App

Hi @croman,

I looked into your issue. I was able to verify that the error is showing up in the console when I open the link you posted. There’s no settings needed to make WebSockets work for apps deployed on Render.

According to this StackOverflow post I found, can you take a look at how you’re establishing the WebSocket connection? Potentially, close() might be called before the connection is established. One experiment you could do is move the close() call to a different location or initially omit it altogether to see if the same error is occurring.

I’ll have a look at it and see if makes things better. The strange problem is that the exact same stack deployed locally or to a droplet on DigitalOcean all works fine. Makes me think there might be something happening at the proxy level directing traffic to our app.

That’s definitely strange that it works fine deployed to a droplet on DigitalOcean.

If the issue doesn’t go away, would you mind creating a minimal repro that we can use to investigate? An express app with a single websocket endpoint and a one-page app that only tries to connect to that endpoint would be ideal.

@croman did you get this figured out?

Interested here too!

I’m getting similar connection issues with Actionhero (GitHub - actionhero/actionhero: Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks) and getting basically the same error `ActionheroWebsocketClient.js:3657 WebSocket connection to

ActionheroWebsocketClient.js:3657 WebSocket connection to 'wss://demo-actionherojs-com.onrender.com/primus?sessionID=1def3d71256d7f2a4c90cb3c6241b055dd08bad9&_primuscb=NrAzOfq' failed: 
opening @ ActionheroWebsocketClient.js:3657
emit @ ActionheroWebsocketClient.js:352
open @ ActionheroWebsocketClient.js:3201
open @ ActionheroWebsocketClient.js:2639
tickedtock @ ActionheroWebsocketClient.js:1589
chat.html:87 error Error
    at Primus.error (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:2889:13)
    at Primus.emit (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:332:35)
    at WebSocket.emitter (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:112:22)

For what it’s worth, these same settings work out of the box on Heroku

Interested here too!

I’m getting similar connection issues with Actionhero (GitHub - actionhero/actionhero: Actionhero is a realtime multi-transport nodejs API Server with integrated cluster capabilities and delayed tasks) and getting basically the same error `ActionheroWebsocketClient.js:3657 WebSocket connection to

ActionheroWebsocketClient.js:3657 WebSocket connection to 'wss://demo-actionherojs-com.onrender.com/primus?sessionID=1def3d71256d7f2a4c90cb3c6241b055dd08bad9&_primuscb=NrAzOfq' failed: 
opening @ ActionheroWebsocketClient.js:3657
emit @ ActionheroWebsocketClient.js:352
open @ ActionheroWebsocketClient.js:3201
open @ ActionheroWebsocketClient.js:2639
tickedtock @ ActionheroWebsocketClient.js:1589
chat.html:87 error Error
    at Primus.error (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:2889:13)
    at Primus.emit (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:332:35)
    at WebSocket.emitter (https://demo-actionherojs-com.onrender.com/public/javascript/ActionheroWebsocketClient.js:112:22)

For what it’s worth, these same settings work out of the box on Heroku.

The demo server us up at https://demo-actionherojs-com.onrender.com (click on “Real Time Chat”)

Hello Evan,

I took a look at your service and tried deploying an Action Hero of my own at: https://actionhero-test.onrender.com/ and was able to have to get it successfully running without the web socket errors.

A few things to try:

  1. Set your build command to: npm install && npm run build
  2. Set your start command to: npm run start
  3. Probably un related but it seems that your Redis instance ended up running on port 10000 instead of 6379. Can you add an environment variable to that service PORT: 6379 which will force Redis to redeploy and use that port.

Let me know if you still have issues.

Thanks for the feedback @Sean_Doughty!
I can see the app building and starting OK in the logs, and I can confirm that it’s properly connected to redis (the app crashes and doesn’y boot otherwise). The REST api parts of the app all work OK (eg Actionhero.js Swagger Documentation).

When checking out your version, I see quite a few problems with the API (nothing loaded on the homepage for instance).

I’m curious if the deployment type matters - I did a web service


This is going to sound nuts - but I’m pretty sure that the new versions of the app I’m deploying are not what’s being served up on https://demo-actionherojs-com.onrender.com/. The logs don’t show any requests, and they should.

Can you correlate a deployment with a URL?


(I’m not allowed to post more comments, so I keep editing this one)

Hello Evan,

We removed the mute from your account you should be able to add more replies.

When you say homepage do you mean: https://actionhero-test.onrender.com/ because that is loading correctly for me.

Web service is correct, did you try changing your build & start commands as specified?

I double checked your deployment and I can see that your deployment is using the latest git commit on your repo.

Hello Evan,

I was able to replicate the error you are having when using the Free plan. We are taking a look to see why this is the case.

Update:
We are looking at why the web sockets are not working with our Free Plan and we will pick up this thread early next week. In the meantime, you could try running your api on the Starter plan.

1 Like

I’m getting the same issue with my Phoenix app too where LV can’t connect. Thanks for looking into this!

Yep! It works on the starter plan!

Thanks for the suggestions all (and this Twitter thread https://twitter.com/fmterrorf/status/1463341413446262793?s=21)

Yeah I’m also getting this on Phoenix. Works flawlessly with a local release but when deployed I get an error. Everything else on the platform is working well.

I can confirm that sockets fail on the free plan but work on the Starter. Phoenix

Hi folks, we’ve resolved the issue with websockets on the free plan. Apologies for any inconvenience here!

I’m using node js web socket and my connection is establish in starting but after few minutes it loss the connection and reconnect
I’m using render free plan how can i make web sockets in node js???

1 Like

Now they seem to fail after ~5 minutes, even with keep alive traffic

I am facing the same issue, the web socket connection failed after around 5 minutes, I am a free tier user.

Hi,

Is there a chance you will fix this 5 min limitation of websocket for free tier users?

I also am having websocket issues. I seem to be unable to use WSS. I hoped Render would forward WS to WSS. Even now my server supports WSS, it doesn’t have certificates so cannot use WSS.

Any plans on this @Sean_Doughty?
Really want a websocket backend for my portfolio and was planning to have it hosted on Render, but it seems like I can’t use Render if I can’t use WSS as https doesn’t allow WS.