After some experience doing multiplayer web games, I would recommend not to use JS for the backend (aka GameServers). While it seems like an approachable solution, it comes with a lot of drawbacks if you’re doing something complex, also NodeJS is ages slow in comparison to C++ or C#.
My recommendation would be to use a Unity GameServer written in C# and then compiled to run on a linux machine, that would be the easiest way you can think of. No need to reinvent the wheel as Unity provides lots of useful stuff.
And just use PlayCanvas for the client, sending inputs and rendering as @yaustar mentioned.
Also, completely forget about using SocketIO anymore. It is no longer needed. And it shouldn’t be an option for realtime multiplayer games. Maybe for other things.