This could serve as a demonstration what a long way way web sockets/rtc/channels still have to go, since the experience is much worse even considering the ping compared to 20 year old netcode.
You're going to hang the state of networked browser gaming on this random person's netcode implementation? Go to r/GameDev and you can find some redditor Unity projects built on UDP that are even worse, but you aren't going to say "wow, UDP sux".
Check out something like https://krunker.io/ which gives me a surprisingly good FPS experience despite my distance from the server.
Browser gaming does take some thought though, to be sure. UDP via WebRTC is relatively new and isn't trivial. And I know some games get around TCP head of queue blocking by opening up 2+ WebSockets.
That was impressive, on mobile and I was able to just hop in and start playing. Not something I’d play, but just impressed that I was able to so easily
Do you have any more information on getting around head-of-queue blocking by opening up multiple websocket connections instead of just one? Seems like an interesting solution.
It's quite fun and has a surprisingly deep movement system. The userbase is very young so if you have any FPS experience you will shred through the average player.
Expect to get annihilated by someone who knows the movement system though. You'll know someone's using it when you see it, since they'll be moving at 999 units per second and circle strafing you to death.
On a similar note, I think people were _way_ too early to celebrate the death of Flash (security issues aside of course). Developers were making content in 2000 which their contemporaries 20 years later don't come anywhere close to in terms of performance, design, or responsiveness.
Flash had more than just security issues. There were definite limits on complexity.
A great example is the original Binding of Isaac; written in flash, but near the end everything was so precarious that backups had to be made before certain publishing stages because sometimes it would corrupt the files it was trying to build (Due to the complexity.)
Well ignoring those issues, is there a html/websocket "framework" which works like flash did?
AFAIK, "zero code" systems still haven't reached the level of hypercard (the spiritual predecessor to flash) when it comes to being able to define event->action with a mouse, much less expanding them to the full capabilities of flash.
I dunno. I implemented my games'[1] netcode on top of WebRTC and it runs just as well as proper UDP stuff. If you configure it be unreliable and pack everything into small binary commands then it behaves exactly like you'd want for a fast-paced multiplayer game.
Obviously most web games use websockets for networking but it is certainly possible (albeit much more difficult) to have very fast netcode in a browser game.
It's been awhile since I took a crack at WebRTC. Do you still need to go through all the peer negotiation even when you are just trying to get to a known server?
Bleh! I was really hoping they would have smoothed that out by now. I just want a damn UDP socket to my server!
I guess it's easier to piggyback on the security model of the P2P handshake than work out a separate model for client-server communication.
I built a pair of libraries for a nodejs<->browser DataChannel, it was a nightmare at the time though, and I'm sure totally obsolete by now.
Given how long it took for us to get %*@!$ data channels, I guess we'll get a simpler way to connect to a regular server in... 2030? (I watched WebRTC very closely from the Ericsson prototype was released... for awhile I was contemplating trying to pass data in the audio or video streams -_-)
Instead of cramming ecoded json into the data channels, like you'd with websockets, you can build binary buffers with all the data that has to be communicated between server and client. For example movement commands like up/down/left/right alongside some flags like isJumping can be packed into a singe uInt8
actually binary websockets won't do in this case since the underlying protocol is still TCP with automatic retransmission mechanism which kills performance for very fast-paced games. You have to use WebRTC in that case