Hello again. Since many years ago few UDP ports was issued for server side, some game changes that to another, but well the system is still the same. Maybe it’s good, i hope so, but i think - this needs changes.
You can see the discord and matrix, jabber, irc chat model - many people connects to one TCP port and they do some db work . So let’s say there is some handle to get into DB - MySQL serves up to 100000 connections for example, there is more than that.
each user will just write his data into his private table with some rows and columns and maybe can write some data into big-world-data-table - writing in one row all his vector moves or exact position only for 500 moves = 500 columns - this is a tick rate and his row means his guid or any number within one map-level. Maybe they just can post some latest changes like link to latest data row.
So server has to connect some people playing in one place with exact private data - meaning other player will read some other table column, so basic moves can be written actually in private table, slightly different but still the same. And also server can check some of such moves if it’s possible or cheat, also can handle data from client-side check-app.
Basically server don’t need to send UDP broadcast after that, as people will read from each other pipeline, except maybe some clear data to rebind or relocate or fix some changes, maybe some global - like this one defeated, actor destroyed. If they can tables from memory - this is reading their exact lines or 60-120 current columns for global of 100-500, so maybe they can be sorted by the current map-position number instead to send them few async datagrams for each group within some position. Nginx/Apache can share global data on different port for few different domain-names aka maps or each-PlayerName.
i mean for global MMO they do use databases to store some user data, this way we can let people work with server in same manner. Basically tick rate don’t need to be huge, but this is made for inner checks and works within memory pool.
If server now just gets data from users and send it for all clients in channel, basically it’s the same, but without memory pool and works in real time for all and maybe load is limited just by the packet size. So maybe users can run their own db and sync it to leave server more resources, working with only vectors - move-shoot-interact in real time and the rest will be synced after. i mean there are different models to do things and this needs some tests, but running a db for 100+ users is possible for many years for not so big servers.
Client-side can run some triggers to check vectors with speed and map position and sync trigger hashes for checks - this can reduce server load and write only checked data. i don’t know the exact server model right now, didn’t find it in documentation. They need to host 20k-100k players in hour sometimes, for global party people can run some sort of matrix-server whrn they run their host for 8-20 players and sync data with global host, such distibuted model can lower down amount of request, maybe it’s hard to implement somehow and it’s not just UDP, but matrix and jabber servers allows to do that. So there can be found more tricks really.