Use OrderedDataStores and ping.
It’s the solution I’m using.
Note that while I suggested this as a workaround on your earlier Development Discussion thread, it was mostly a what-you-can-use-now alternative to your current approach. Now that we’re talking Feature Requests, I wouldn’t suggest the same thing, as it’s not as great as a dedicated feature and prone to:
###Exhausting DataStore request queue
I would have to make 1
ODS query and #servers
DS queries to display a list of all servers and contained players. I can limit this by constraining the ODS search to only return 5 servers at once, but then I’m still using 6 DS queries per page. It’s not such a problem if I’m using DS only for this, but if someone browses through 5 pages of 5 servers each, I’ve lost half of my requests available per minute that are needed elsewhere. With good DS interface design, this won’t cause a loss of data, but it will slow down requests when there are no available requests left.
###Returning dead servers in results
Because DS requests are limited based on #requests instead of amount of traffic, we have to send pings at longer intervals – we’re likely having to cache ODS results to save on #requests used as well, further outdating our results. This is prone to returning crashed servers. Since a simple heartbeat ping doesn’t generate as much traffic as the average DS request, an official feature could use more frequent pings and provide more up-to-date results.
###Encouraging code duplication
Since there’s no feature to do this, every developer who wants to utilize such a feature has to re-implement what others have already made. Especially with as large a feature matchmaking is to games it’s used in, this can be painful. It’s really helpful to be able to reuse tried and tested libraries/etc for critical tasks instead of designing and implementing from scratch, testing correctness, and supporting your own through changes to the platform.
Yeah sorry, I read your post yesterday incorrectly. I now realize you were suggesting what I had already implemented, I was just too tired to realize that. I’m sincerely sorry.
Hello I know this is an old post but I was wondering what external service you were using to support this (cloudflare or some?)
Memory store service isn’t scalable enough. I’m currently using it in my game Kickoff Club: Soccer [Alpha] - Roblox in combination with messagingservice to distribute the load evenly between these two services. In addition I have a custom implemented queue system to rate limit how much I use these services on top of the one roblox provides, with it only utilizing the services when absolutely necessary, yet it still throttles instantly at 1000+ Players.
Despite using the services at the bare minimum requirements it is completely unscalable at a large game, so I would not recommend anyone to use memorystore service unless they need to store really small amounts of information (Which in that case they could just use some other functions from roblox’s own api), and are confident in implementing a sophisticated sharding system, dynamic rate limiting with queues, among other things. HTTPService is the only scalable solution I’ve found, this is supported by other games that use it like MeepCity.
Memory Store Service has many limitations that make it impractical in a server list scenario