Making a clan/crew/guild system - how do you handle cross-server updates?

I’m making a crew/clan system, and I am pretty much planned on how I’m going to accomplish it, but I’m stuck on how I should handle updates that need to be sent across servers (ex. kicking a player from the clan who isn’t in the same server, changing a member’s rank)

How do you guys handle this?

The clear answer seems to be MessagingService, but I’m not sure how scalable/reliable it is. A second option is also the convenience of the GlobalUpdates feature of ProfileService, which my game uses, but I’m not sure if its the best option to use for this type of system.

How do you handle your crew/clan/guild system with saving? Do you save all of the clan’s info to a datastore key, or do you attach ClanInfo to every individual player’s data and update that?

If you have any methods, how reliable are they?

2 Likes

You could also just restart all servers

Wouldn’t that be a bit too much? That would mean kicking everyone in every server right?

As long as you are saving the data when they leave its really not a big deal. My first idea was to use an epoch system that would warn the client they would get kicked but this wont work if you got a lot of players. I guess what you can do is wait till your player count is really low then update it

I don’t think that’s great at all for user experience. I need a good way for manipulating data / sending out updates between servers

Is messagingService reliable/scalable enough?

The whole problem here is that even if you implement messaging service you still have to restart the servers. You never implemented a listener.

I wouldn’t recommend using a system like this, as it - like @rek_kie mentioned - is not good for experience, and may mess up some data saves.

I’m not sure what you want me to tell you here, think of it from a exploiters perspective if you have some way of changing the code (rawset(), newproxy()) on the server you basically just put a backdoor

…no I don’t?

It’s easy to implement but I’m not sure how scalable or reliable it is.

What?

I’m not sure if you understand what I’m trying to do here

What do exploiters have to do with this? This is purely server sided

So do you want like updates real time? Right now? I just cant think of a way without creating backdoors, the file system in lua is very dangerous

How tho? The whole messagingservice is server-side?

If you have some way of updating server side data without the servers permission, IE you are updating it offsite and not restarting the server you created a backdoor, thats the definition

Yes but messaging service requires a update, which he doesnt want. To add on it can only handle about i think like 1 kb? Thats like a 60 line script

That makes no sense.

No form of exploiting would be possible. The only way a client would be able to have an effect on data is if they perform an action via remote, which is sanity checked

Bro no it doesn’t

MessagingService is as simple as publishing to a topic with code via PublishAsync and then all servers subscribed to the topic pick up the event.

Think of it as a global BindableEvent. I don’t need to publish an update to the game

Exactly. This being said, I think it would be the right way to use this service. You just have to keep the limitations in mind.

1 Like

I can only think of 2 ways for cross server messaging.

1.) Using Messaging Service

I have personally used Messaging Service for a system similar to what you are asking about, I can safetly say that I have not run into as many issues with Messaging Service.

My only complaint would be how a signal would fire seperately to each in game server a little slow.

2.) Offsite Services

You could theoretically use an offsite platform to host signals but I would see this as a pretty difficult task so I would just go with MessagingService as it does the job just as fine with a slight delay between servers.

2 Likes

What exactly did you use MessagingService for? Sending updates on joins, kicks, etc?

Instead of kicking them I just created a place with an empty baseplate and called it Updating Servers, and it teleports the players there and back when an update happens.