Advertisement
Advertisement
⚡ Community Insights
Discussion Sentiment
85% Positive
Analyzed from 1564 words in the discussion.
Trending Topics
#web#more#elixir#client#beam#post#game#why#using#build
Discussion Sentiment
Analyzed from 1564 words in the discussion.
Trending Topics
Discussion (41 Comments)Read Original on HackerNews
but I do wonder if BEAM is a bit of an overkill, even fly.io (known among developer threads to be very unreliable uptime) wouldn't be my first pick.
Cloudflare Durable Objects really is generous, not often can you get replicated database and realtime sync for such low barrier in cost and implementation.
I do wonder tho what Cloudflare's ultimate game is, as I'd imagine once they corner the market and practically everything is running off it, wouldn't be hard to say raise the $5/month to something higher.
BEAM gives it to you for free, and you don't rely on an Internet-scale monopoly to run it.
1) It's very difficult to ensure globally serialized ownership with strong consistency in a distributed Erlang cluster when nodes are allowed to fail. Stuff like Horde will let you do some rough "run an instance of this process somewhere in the cluster", but it's eventually consistent (you may have multiple instances at times) and doesn't deal with netsplits well.
2) Mnesia is fine to replicate state within a network switch or very reliable LAN, but not over WLAN/Internet. It can enter split brain conditions and require external reconciliation. RabbitMQ suffered from Mnesia problems for many years and ended up replacing it with their own DB implementation using the Raft protocol.
Why would it matter if something's overkill? If it's not much more work, and it runs on the systems you're targeting, it's better to start with something that's more reliable than you might strictly need than to start with something that you believe to be "proper kill", only to discover that you underestimated the amount of "kill" required. Retrofitting things like proper supervision and data/crash isolation can be a huge, huge pain in the ass.
Yes, this makes my day: (also) target macOS for continuous rapid loops on one project, or target iOS and end up flitting back and forth between many projects. ("mac (made for iPad)" does not work.)
I'm now working on a "nsnipes" game, and that, because of the multi-player aspect, is going to need a backend server.
Love it. Went into my bookmarks for later tonight.
One could argue that with agentic programming, releasing on a new platform is simply a matter of prompting for a new target, but I fear that the non-determinism of LLMs will lead into a whac-a-mole situation where you’re constantly fighting framework specifics and the code that the agent spit out to get to pixel perfect solutions across the platforms. Flutter in this case would be a more token efficient solution and quite fast on most platforms (particular the ones where their Impeller engine runs).
Aside: The links to the web game in the post don't lead to being able to play.
It's a very productive and readable programming language with excellent documentation and conventions, and the most ergonomic way of handling concurrent operations (thanks BEAM) I've encountered.
The VM it runs on was originally designed for telephone switches, which, it turns out, cleanly translates to the internet/http era.
It makes it trivial to do soft-realtime because it's just actors (GenServers) passing messages.
I invite you (and others) to try it out and do a small weekend project. It'll make you reconsider reaching for TS on the backend :)
Async runtimes can’t really do preemptive scheduling so those end up using other methods that, while getting low latency, may not improve reliability or reduce variance in latency.
Orchestrating tasks across a number of different services that are not in your control becomes a distributed system where not everything is reliable.
I've been curious about elixir for years. Since maybe 2016. I tried in the days before AI, but I couldn't really get over the hump of syntax and BEAM and all of that.
I'd read it was the kind of thing that would be good for games, but I didn't really understand why until AI helped me build this.
A room is a GenServer. Which means its a process. Which means the unit of gameplay matches the unit of compute, kinda. That's really great. You can't really do that with node. Well, I guess with Durable Objects / PartyKit you have a closer match there.
There is a matchmaker process that runs. It assigns your socket to a room. But yeah, after that, your socket is exchanging messages with that room.
Because arrow physics are simple, the client predicts how it thinks the server will say things will be, and reconciles if / when wrong when it hears from the server about the room state.
To sum it up, it seems that Elixir naturally provides the distributed routing and computing model needed for realtime communication, while you'd need specific libraries and infrastructure with TS. Thanks!
It (phoenix channels) worked out of the box. in the last 6 years of development and growth, not once have we ever had to even discuss scaling issues related to it.
It just works and when you're in a startup, the more you can focus on growing your product instead of scaling issues, the more you're winning.
likely - it would grow organically too since all one has to do is share a link.
for social games yeah - Elixir | BEAM is an excellent stack.