The MessagingService, as of today, does not present a way to fetch the current budget available within’ a game like the DataStoreService does. (DataStoreService:GetRequestBudgetForRequestType)
The lack of a way to access the budgets greatly affected my plans of making a game heavily inspired by this post, which was the basis for most information that I could find.
I’ve spent weeks making, changing and validating formulas over and over again, but I am unable to reach a formula that correctly yields the time all servers would need to simultaneously wait to avoid hitting a limit that I can sadly only guess.
In these weeks, I found a lot of formulas and details that I believe would be key for this post, so here they are:
- Limitation formulas
- Most formulas provided in the documentation are written in
Messages/min
.
Formula:(Base + Increment * Players|Servers) Msg/min
- Dividing by
60
provides the rate inMessages/s
.
Formula:(Base + Increment * Players|Servers)/60 Msg/s
- Dividing by
Players|Servers
yields the rate of a singularPlayer|Server
.
Formula:(Base + Increment * Players|Servers)/(Players|Servers) Msg/min
- Replacing
Players|Servers
with1
gives you the base rate of a formula.
Formula:(Base + Increment * 1) Msg/min
- Eliminating the
Base
value of a formula gives you its final rate.
Formula:(Increment * Players|Servers)/(Players|Servers)
or(Increment) Msg/min
- Elevating by
-1
returns you the interval between requests inMin/msg
. (Best used inSec/msg
)
Formula:(Base + Increment * Players|Servers)^-1 Min/msg
or1/(Base + Increment * Players|Servers) Min/msg
.
Note: To convert fromMin/msg
toSec/msg
you need to multiply by60
.
- Server Limitation
150 + 60 * Players
, with a base rate of210 Msg/min | 3.5 Msg/s
.- Its final rate is
60 Msg/min | 1 Msg/s
.
- Global Limitation
100 + 50 * Servers
, with a base rate of150 Msg/min | 2.5 Msg/s
.- Its final rate is
50 Msg/min | 0.8333 Msg/s
.
- Topic Limitation
- Note: This limitation is NOT shared across topics, each topic has its own limits.
10 + 20 * Servers
, with a base rate of30 Msg/min | 0.5 Msg/s
.- Its final rate is
20 Msg/min | 0.333 Msg/s
.- The rates can be multiplied by the number of topics that has the same response.
Formula:(10 + 20 * Servers) * Topics
- Subscription Limitation
- Note: This limitation is NOT in
Msg/min
, instead yielding the number of subscriptions a server can make.5 + 2 * Players
, with a base of7 Subscriptions
.- Its final subscription amount (
200 Players
) is405 Subscriptions
.
With all of this information gathered, it would make sense I would’ve figured out something already, but my main problem is (I can only assume) the Global Limitation.
No matter how hard I try, if I follow the conventional formula given for it, get its singular rate, and convert it to Sec/msg
, it always hits the budget after a while if more than a single player is present.
I’ve done the same procedurements with the remainder of formulas, and they all yield a perfect timing window between sending and receiving messages.
I wanted to know if its possible to, somehow, predict the available budget for the global limitation so I could keep a consistent rate of messages between servers.
Note: There is a good chance that the documentation for the global limitation is incorrect, especially since dividing the rate by Servers^2
and then converting it to Sec/msg
has been giving me a consistent interval of time that doesn’t hit the budget at all, implying that the global limitation budget is subtracted by the amount of servers online everytime a message is published.