No sure if it's still useful to you, but would like to share how I solve the same problem here.
So the problem is that you set two ports for the remote machine, which is PORT and IO_PORT, but render only accepts one port binding when it comes to public traffic, such as Websocket etc. Once you set the PORT as your main process, the request from your Websocket client will only be directed to the PORT instead of the IO_PORT that your wss server is listening to due to Render restriction.
More info can be found here: https://render.com/docs/web-services#port-binding
To solve the problem, I found a repo that helps establish a websocket server on the main port (If you are using next.js and don't want to set custom server).
You can check out here: https://github.com/apteryxxyz/next-ws
But if you are using node.js or other backend stack, you can also achieve it simply by handling the upgrade process in a specific route. Not sure if socket.io supports this feature but you can also search that out.