Pondo
Hello to you
I create a private server for World of warcraft, is Elixir a powerful enough language for this kind of project?
Trending in Questions
Hey guys,
I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly
Do you guys have any suggestions what is the best prac...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
Anyone here using Honeybadger?
My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of
Bandit.HTTPError...
New
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixir-ls
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
yawaramin
I’m not familiar with World of Warcraft servers, can you explain a bit more what kind of server this is? What does it do mostly? What kind of traffic are you expecting? I/O bound or CPU bound? Etc.
benwilson512
Elixir and the BEAM have been used for game servers before so I’m sure it would do well. Your main challenge will be implementing all the logic which I’m sure is non trivial. If your goal is to have a customizable WOW server you may get what you want more quickly by forking some existing open source implementation.
Pondo
The most popular multiplayer games like World of Warcraft, Call of Duty or Minecraft, as well as thousands more online games, work basically the same way. Players install a “client” for the game on their computer and then connect to the game servers via an internet connection. There are several different servers that are required to play these games.
Before you can actually start playing, you need to get into the game. So you need login servers. Whenever you are trying to connect, the login server is confirming the data of your account in the database to know who you are. After you select a character from your character list, the login server acts as a road sign, guiding you to the correct game server.
These servers are generally distributed around the world as it guarantees access to the game even if one of the login servers is not available. If a server fails, players can still enter the game through the other servers.
After having checked the data of a player, the client is connected to the game server. That’s where the game happens. Games with very large maps host a game world on multiple servers.
Game servers also regularly send customer data checking if the player is still online. If they do not get a reaction, the character will be “kicked” from the game.
The tasks are quite varied, for example for map generation I think it is quite demanding in CPU / Calculation and for the rest moving players, quest etc. I don’t know too much
WolfDan
Only Elixir? I don’t think so, Elixir is weak on calculations, so for example heavy calculation systems like geometry engine, pathfinders will not perform really well on Elixir, so that stuff can be done as a NIF (could be rust or c++ I’d recommend Rust tho)
Everything else Elixir is capable of it, all the spell cooldown management, inventory systems, battle sytems, markets etc… could be done with Elixir without any problem
Tho keep in mind that Elixir is a functional language so some solutions like Entity systems and such can take a bit more of effort compared to OO languages
adrianrl
Hi, I’m confused. If you already have a private server, where do you want to use Elixir? or is it something that you want to build from scratch?
Let me start by saying that it’s not an easy task, popular implementations of World of Warcraft servers are written in C++ and took years to get where they are now, with hundreds of contributors helping with the code. You need to communicate your app with the WoW client, recreate maps, battlegrounds… implement the structure of the database with the skills, quests, achievements… I’m being scared by only thinking it.
Anyways, Is Elixir suitable for gaming servers? Yes. Is Elixir suitable for high performance gaming servers? Probably not, or at least not alone.
Pondo
Hello,
What do you mean by high performance? I see… I might get my hands on a Minecraft server to see
But then, if I use another language for the map generation, Elixir can do the rest?
Do you consider Counter strike global offensive or Leauge of legend servers as high performance servers?
kokolegorille
Most of those games are made with engines, for example, unity3d, unreal engine, godot… (c++, c#).
There is now a c# library for connecting to phoenix websocket, called Fenix.
You don’t need to write a new engine in Elixir, but You can use existing engine, and use Elixir as communication (match maker, presence, chat, lobby etc.)
I read some blogs about Elixir and Unity3D, and tried also, but it’s heavily under rewrite (Network, Entity system). It’s funny how they are trying to use multicore processing with there new ECS. It looks they have discovered benefit of immutability, and functional programming
Pondo
I understand, but my goal is to reimplement the critical elements and not just the match making.
Cochonours
game servers don’t perform a lot of computation usually. Most of the time it’s about receiving new coordinates and sending that data to the other players in the same zone, send data about the movement of fauna and NPC (and this could be computed on the client as well if we just send the paths they are supposed to take), and less often sending info about other actions like fighting and etc. Aside from message passing, it stores every meaningful actions in logs/DB/whatever and that’s it, so the computation can really be minimal (depending on the game most things could be done on the clients, with the server only arbitering the results).
The server has to check the players are not cheating of course, but that can be done in another program which analyses the logs output by the elixir server. Or at least that’s how I would do it, except for really important stuff related to money which would be computed on the main server.
adrianrl
I think they are, not because the type of game, but the number of players connected simultaneously, since those kind of games have a multiple servers available and limited to X number of players. Riot blogs about its infrastructure and other things, so their engineering blog should be a very valuable resource for you: https://technology.riotgames.com/. Let me highlight a piece of this article:
Replace Erlang by Elixir and you have a nice use-case for using it in a professional game, they also use Electron as its GUI client. The key takeaway here is “use the right tool for the job”, a complete game like WoW, LoL, CS… requires a stack of many technologies playing together, for example:
Of course some parts are redundant, for simple games you implement multiple things with the same language, this is just to illustrate a very complex and professional stack, and it’s not viable to do something like this alone. However when it comes to experimenting, prototypes and so on, you can ignore the initial step of valuating technologies in search of the best performance, sometimes the initial result is better than you would expect.
This is not about gaming but online servers, an interesting article of how Figma started with a pure TypeScript stack before migrating to Rust: How Mozilla’s Rust dramatically improved our server-side performance | Figma Blog.
As you can see, the initial implementation were not that bad, and it was pure JavaScript at the end of the day, something like Elixir should have played better than this.