Closed HeadClot closed 5 years ago
we focus heavily on mirror performance recently. you should be able to run 1k players on a server without too much effort.
do you want master server because that's what everyone else does, or do you risk running past 1k CCU? if yes, how many?
Hey Vis2k thank you for your reply.
So here is the issue I am having for our Space MMO Project. But first some context there is a space game that has raised well over 250 million in crowdfunding. Allot of the players of that game are rather frustrated with the slow progress by its dev team. Among them are some very large streamers who bring in 2000 people and up to the game depending on the streamer.
So for the past few weeks I have been working on a VR Movement prototype with Mirror, VRTK, and Unity. My goal is to have 1 solar system holds 1k people but people can jump between servers at certain points in the game world.
I need something distributed because of the community I am targeting with this other Space MMO has 2.2 million backers and I am looking to capture a good amount of them with my game.
So in short - We risk running over the 1k CCU when some of the larger streamers play it and If it takes off with this community.
Wouldn't the Mirror Booster be a better setup for you? That thing is designed to handle more than what Telepathy alone can handle; it's a separate script that is invoked externally via the Booster Transport. The server connects to that and you have a high-speed local link while you direct all the clients to the Booster's listening ports.
That's what vis designed it for.
EDIT: There was a master server-like project using Mirror which was Insight, that is no longer maintained. That might be something worth looking into.
@SoftwareGuy I looked into booster that does not fit my needs for what I am going for. It would help but I need server to server communication.
That said I know that @vis2k had a much simpler version of what I am describing called Network Zones for his ummorpg assets. That could be a good starting point for something like this in addition to Insight or some other server.
@HeadClot ready-to-use solution that solves your problem (one giant world with all players) is SpatialOS.
I'm working on something simpler, but the most difficult part is authority of entites. What I'm prototyping are zone servers where each server handles some part of the world and the zones are somewhat dynamic. The problem is when e.g. player shoots - you need to handle shot on all hit objects and affect them, but only servers should be authorized to do so.
What you can use (if teleporting is acceptable) is proxy like Bungeecord for Minecraft. It is lightweight proxy that simulates player connections. Each "sub-server" (just normal game server) is standalone game server and knows nothing about whole architecture. Player side is simple too and all lifting is made by this proxy. If more than X players will join single server (of course you can limit it, but YouTuber or Twitcher viewers will be sad if they wouldn't be able to join idol :) ).
I'm on Mirror Discord or you can contact me by any other channel if you are looking for some programming help (I suck at graphics/animation).
Hi all,
I run Mirror with Agones to do the orchestration and allocation of many, many game servers at once. It's open source from Google! Also, I use nakama for authentication and matchmaking-- combine all three and that's a pretty good OSS stack!
Sent from my iPhone
On Oct 24, 2019, at 12:58 PM, Misiek notifications@github.com wrote:
@HeadClot ready-to-use solution that solves your problem (one giant world with all players) is SpatialOS.
I'm working on something simpler, but the most difficult part is authority of entites. What I'm prototyping are zone servers where each server handles some part of the world and the zones are somewhat dynamic. The problem is when e.g. player shoots - you need to handle shot on all hit objects and affect them, but only servers should be authorized to do so.
What you can use (if teleporting is acceptable) is proxy like Bungeecord for Minecraft. It is lightweight proxy that simulates player connections. Each "sub-server" (just normal game server) is standalone game server and knows nothing about whole architecture. Player side is simple too and all lifting is made by this proxy. If more than X players will join single server (of course you can limit it, but YouTuber or Twitcher viewers will be sad if they wouldn't be able to join idol :) ).
I'm on Mirror Discord or you can contact me by any other channel if you are looking for some programming help (I suck at graphics/animation).
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
I am going to close this issue. I was going about this the wrong way technically speaking.
Please explain the suggested feature in detail.
Server to server communication using a Master Server (aka Relay Server) and a bunch of sub servers which are basically headless mirror servers that act as clients to the Master Server.
How exactly does this keep you from releasing your game right now?
Currently Mirror runs as a single standalone server instance and in order to get more players into a single server you need stronger hardware. This is called vertical scaling and is really not very good for a larger scale MMOGs with allot of players playing concurrently.
Scaling would allow me to distribute the network load more evenly across servers and allow for more players within my game as well as other peoples games.
Can you suggest a possible solution?
Basically create a "master server" (called a "Relay Server"). It's purpose is connect the client to the other servers, as well the servers to other servers. It receives messages from two distinct ports: one is public and is the port used to communicate with the clients; and the other is a private port which only the sub servers can use (the intention is that this port can only be accessed from LAN). This server handle login stuff, and forward messages from the clients to the sub servers, and from the servers to the clients.
The sub servers are basically just normal clients. They have a list of connected clients with IDs assigned by the relay server, and this ID is used from all the servers to inform which client must receive the message (in the case of a sub server send an message to the client), or which clients send an message to that server. This ID is also used to determine if the message sender was a client or another server.
Additional context Add any other context or screenshots about the feature request here.
Simple Server Structure