Are OnMMOItemVariableUpdates events batched? or is it 1 network call per update?
ie:
1000 mmoitems and each have an itemvariable update from server within the same 100ms, will this translate into 1000 separate network calls or are they batched into 1 or a couple automatically by SFS?
If it is not batched and I want batching, does that mean I can't use OnMMOItemVariableUpdate and would have to create my own event?
Batching
Re: Batching
Yes,
they're batched on every proximity list update. In other words all the changes happening in the player's AoI between two proximity updates are sent in one update.
Cheers
they're batched on every proximity list update. In other words all the changes happening in the player's AoI between two proximity updates are sent in one update.
Cheers
Re: Batching
I am only updating 2 ints per mmoitem update and it is causing 74 bytes per item.. 2 ints are only 8 bytes, so there are 66 bytes over head..
Updating 20 units's position for a player is causing roughly 3kb every second..
12 Sep 2018 | 15:12:50,502 | DEBUG | pool-1-thread-1 | v2.protocol.SFSProtocolCodec | | {OUT}: OnMMOItemVariablesUpdate
12 Sep 2018 | 15:12:50,502 | DEBUG | pool-1-thread-1 | protocol.binary.BinaryIoHandler | | Binary size: 74
12 00 03 00 01 70 12 00 03 00 01 72 04 00 00 00 .....p.....r....
00 00 01 76 11 00 02 11 00 04 08 00 01 78 02 02 ...v.........x..
04 00 00 00 3D 01 00 11 00 04 08 00 01 79 02 02 ....=........y..
04 00 00 00 2C 01 00 00 01 69 04 00 00 01 17 00 ....,....i......
01 61 03 03 EF 00 01 63 02 00 .a.....c..
ie:
List<IMMOItemVariable> vars = new ArrayList<IMMOItemVariable>();
vars.add(new MMOItemVariable("x", npc.GetX()));
vars.add(new MMOItemVariable("y", npc.GetY()));
Ext().getMMOApi().setMMOItemVariables(npc.GetMMOItem (), vars);
// 74 bytes
SFSObject params = new SFSObject();
params.putInt("x", npc.GetX());
params.putInt("y", npc.GetY());
SendPacket("pm", params, client);
// 58 bytes
MMOItemUpdates seems to be 30% heavier than a custom event.. Is it possible to tweak setMMOItemVariables locally so theres less overhead?
i would like to use mmoitem updates instead of using custom events if possible.
Updating 20 units's position for a player is causing roughly 3kb every second..
12 Sep 2018 | 15:12:50,502 | DEBUG | pool-1-thread-1 | v2.protocol.SFSProtocolCodec | | {OUT}: OnMMOItemVariablesUpdate
12 Sep 2018 | 15:12:50,502 | DEBUG | pool-1-thread-1 | protocol.binary.BinaryIoHandler | | Binary size: 74
12 00 03 00 01 70 12 00 03 00 01 72 04 00 00 00 .....p.....r....
00 00 01 76 11 00 02 11 00 04 08 00 01 78 02 02 ...v.........x..
04 00 00 00 3D 01 00 11 00 04 08 00 01 79 02 02 ....=........y..
04 00 00 00 2C 01 00 00 01 69 04 00 00 01 17 00 ....,....i......
01 61 03 03 EF 00 01 63 02 00 .a.....c..
ie:
List<IMMOItemVariable> vars = new ArrayList<IMMOItemVariable>();
vars.add(new MMOItemVariable("x", npc.GetX()));
vars.add(new MMOItemVariable("y", npc.GetY()));
Ext().getMMOApi().setMMOItemVariables(npc.GetMMOItem (), vars);
// 74 bytes
SFSObject params = new SFSObject();
params.putInt("x", npc.GetX());
params.putInt("y", npc.GetY());
SendPacket("pm", params, client);
// 58 bytes
MMOItemUpdates seems to be 30% heavier than a custom event.. Is it possible to tweak setMMOItemVariables locally so theres less overhead?
i would like to use mmoitem updates instead of using custom events if possible.
Re: Batching
Hi,
this is the object dump of the binary MMOItemVariable update you posted:
As you can see there's only the strict necessary.
While I understand that every byte counts I can't see how a 74 bytes update is going to negatively affect the game compared to a 58 bytes update, provided the client has a reasonably decent connection. (by which I mean, even an old ISDN connection would suffice)
Cheers
this is the object dump of the binary MMOItemVariable update you posted:
Code: Select all
(sfs_object) p:
(int) r: 0
(sfs_array) v:
(sfs_array)
(utf_string) x
(byte) 2
(int) 61
(bool) false
(sfs_array)
(utf_string) y
(byte) 2
(int) 44
(bool) false
(int) i: 279
(short) a: 1007
(byte) c: 0
As you can see there's only the strict necessary.
While I understand that every byte counts I can't see how a 74 bytes update is going to negatively affect the game compared to a 58 bytes update, provided the client has a reasonably decent connection. (by which I mean, even an old ISDN connection would suffice)
Cheers
Re: Batching
Unfortunately, theres a monetary cost to bandwidth.
Saving 30% is 30% less.. We don't have big budget to work with.
Saving 30% is 30% less.. We don't have big budget to work with.
Re: Batching
Seems like a rather distorted way to look at it
It's not that the client/server bandwidth is exclusively made of MMOItem updates, for starters, so the alleged 30% is not really going to have that impact on the overall network usage.
More importantly your previous example with the pure SFSObject, is not even correct. You didn't factor in the Room id, the item id and the hidden flag, which is an attribute of the ItemVariable. So the 30% figure is not even correct.
Cheers
It's not that the client/server bandwidth is exclusively made of MMOItem updates, for starters, so the alleged 30% is not really going to have that impact on the overall network usage.
More importantly your previous example with the pure SFSObject, is not even correct. You didn't factor in the Room id, the item id and the hidden flag, which is an attribute of the ItemVariable. So the 30% figure is not even correct.
Cheers
Re: Batching
I do not need any of that, x, y, and id are all i need for positional updates.
That is why I asked specifically if there is a way to tweak it so that the extra stuff can be omitted/discarded to save bandwidth.
Both versions of the code i posted works perfectly fine for me, the only difference is the bandwidth used and batching.
I would prefer to use mmoitem updates because like you said there is batching. I read in another post that custom events have no batching. And if there is no way to tweak it, my resort would be to create custom batching for events.
Yes you are correct client/server bandwidth is not mmoitem updates alone, but for my setup, probably 80% of the bandwidth would be from position updates.. Cost estimating at 2k users, thats 1600 bucks every month just for position bandwidth ($.1/gb) at max 2k ccu =(.
If not 30%, lets put it at 10%, which is still alot..10% off $1.6k is 160 bucks saved every month; one year would equate to 2k saving, enough to purchase SFS licenses =). So I would rather save 10% in bandwidth and buy additional SFS licenses.
That is why I asked specifically if there is a way to tweak it so that the extra stuff can be omitted/discarded to save bandwidth.
Both versions of the code i posted works perfectly fine for me, the only difference is the bandwidth used and batching.
I would prefer to use mmoitem updates because like you said there is batching. I read in another post that custom events have no batching. And if there is no way to tweak it, my resort would be to create custom batching for events.
Yes you are correct client/server bandwidth is not mmoitem updates alone, but for my setup, probably 80% of the bandwidth would be from position updates.. Cost estimating at 2k users, thats 1600 bucks every month just for position bandwidth ($.1/gb) at max 2k ccu =(.
If not 30%, lets put it at 10%, which is still alot..10% off $1.6k is 160 bucks saved every month; one year would equate to 2k saving, enough to purchase SFS licenses =). So I would rather save 10% in bandwidth and buy additional SFS licenses.
Re: Batching
Mrm83 wrote:I do not need any of that, x, y, and id are all i need for positional updates.
You also need Room id, otherwise you don't know where the Item belongs, so essentially you need all of that stuff
You might not need the "hidden" flag which is literally 1 extra byte.
No you can't tweak the message, sorry. If you could you would break the client side API.That is why I asked specifically if there is a way to tweak it so that the extra stuff can be omitted/discarded to save bandwidth.
Code: Select all
I read in another post that custom events have no batching. And if there is no way to tweak it, my resort would be to create custom batching for events.
Since they are custom you can do whatever you want with them.
You can send a packet with 1 event, 2 events, a 1000 events...
Cheers
Who is online
Users browsing this forum: Google [Bot] and 46 guests