307 karma · joined April 15, 2014
contact: hpandey [at] hathora.dev
We published our benchmarking script on Github[0], I'd love to see results from other geographies and perhaps even other providers like Linode and Hetzner!
I've had success using it as the backend+networking stack in conjunction with game UI tools like Phaser and Pixi.js.
Would love to connect and exchange notes about multiplayer development -- if you're interested, my email is on my profile.
Edit: I realize now you're talking about desktop Safari. Star-jump doesn't seem to work on it for some reason, will have to investigate why...
It's a 2d multiplayer platformer using Phaser[0] for physics on the backend, and it's hosted on Hathora Cloud!
For the web, we're deciding between using WebRTC or leapfrogging straight to WebTransport[0]. Either solution would be a thin layer on top of the raw UDP work
Websockets do actually support binary packets not just strings. But yes you lose control over the server side receiver part of the connection (we think most developers will be ok with this)
Hathora Cloud will be able to run anything that can be packaged into a Docker container and implement the Hathora Protocol (yet to be formally documented)
1) Built in authentication/identity
2) Session/room based connections (with lobbies, matchmaking, etc)
3) Handlers for various transports (websocket, TCP, UDP)
It's common for people to build this kind of retransmission logic on top of UDP (especially for networked games), it's sometimes referred to as "reliable UDP".
If the client misses too many frames the server can send it a snapshot (that way the server can hold a bounded number of old updates in memory).
1) Bandwidth. The users internet can only handle so much network throughput, so for fast paced games (where you're sending data to each client at a rate of 20+ frames per second) it becomes important to optimize your per-frame packet size. This means using techniques like binary encoding and delta compression (only send diffs).
2) Server infrastructure. For client-server games, latency is going to be a function of server placement. If you only have a single server that is deployed in us-east and a bunch of users want to play with each other in Australia, their experience is going to suffer massively. Ideally you want a global network of servers and try to route users to their closest server.
3) TCP vs UDP. Packet loss is a very real problem, and you don't want clients to be stuck waiting for old packets to be resent to them when they already have the latest data. UDP makes a major difference in gameplay when dealing with lossy networks.
2) There is a managed cloud coordinator (load balancer) which Hathora apps connect to by default, so you don't need to do anything for that. For the distributed file system I've been using https://aws.amazon.com/efs/, and each cloud provider as their own version.
3) Aren't the photon products tied to Unity?
Would love to chat in more detail in Github or in the discord: https://discord.gg/6nVdeCBffR
I'm not sure I understand the "Hathora-in-the-middle" piece -- Hathora isn't quite a Backend-as-a-Service like Firebase if that's what you were thinking. Hop on the discord server if you're interested and I would be happy to chat in more detail.
Thank you for the feedback!
To me, part of the value Hathora adds is from being an integrated and easy to use solution where you don't need to figure out how to put the parts together in order to develop your game.
That being said, there are a number of features that make Hathora performant and easy to scale for realtime multiplayer games -- you can read about some of them on the architecture page: https://docs.hathora.dev/#/architecture
I plan on adding benchmarks in the coming weeks to better quantify perf and scalability
The latency will be even further improved once I add UDP support, and I also plan to write a library to make client prediction easier with Hathora.
Generating a Lua client should be very reasonable. If you'd be interested in contributing (or just want to follow along), feel free to jump on the discord!