Protocol Speeds?

Started by
30 comments, last by Synth0id 21 years, 4 months ago
my sense is that object passing between clients/servers is generally a bad idea b/c an object is far bigger bitwise than the actual information that is strictly necessary.

example:
object passing version -
move a player on ServerA
send player object (fairly sizeable object) to ServerB
ServerB now knows where the player is

homegrown socket programming stuffs version -
move a player on ServerA
send new player location (3 floats) to ServerB
ServerB now knows where player is

the idea is that there is far more information in the player object than the other client needs to keep getting sent in order for the game to run. you don't need to update the skin name every frame, for instance. you are probably going to end up wasting a lot of bandwidth using object sharing that you could otherwise be using to make your game run faster.

but then again i have no idea how MFC / .NET object sharing stuff works. maybe it's incrediably effiecient. i kind of doubt it tho. my sense is that .NET is meant for web based information transfer where a 1second wait time is of little significance. though you could get a workable solution out of using a technology that was developed for an entirely different purpose, it's most likely not going to be as performance sensitive as you need it to be for a MMPORPG.

it's good to see that you aren't using remoting for client to server, but you probably need the same performance tweaks in server-to-server communications that you do for client->server communications...

-me

[edited by - Palidine on December 2, 2002 4:13:43 PM]
Advertisement
@Palidine

I''m not sending objects from server to client only server to server on a LAN.

I assume you posted that just after I posted my response and didn''t see it hehe.
There is no point in doing anything at all, you'll die pretty soon anyway.
I''m going to be totally non-constructive here.

This reminds me of an article I read that found people who are completely incompotent often have no idea they are incompotent. Sorry man, but you should be taking baby steps here. You can''t just start off making a MMOG by yourself while having no clue about what you''re doing...
No way to get that "clue" without asking questions and learning. I see no problem with asking questions, do you?
There is no point in doing anything at all, you'll die pretty soon anyway.
AP, people can pretty much start wherever they want. baby steps is best for some, jumping into the fray is best for others. i definitely fall into the latter category. my first game ever was a 3D game with an original engine. i didn''t know linear algebra/ any 3D API / or have really good concept of software architecting. worked out fine. great learning experience. whatever...

anyway, yeah, so i actually just posted my last response without any attention to reading comprehension. You''re definitely safer going with Remoting if your servers are on a LAN. but if you are going to go through all the trouble of designing your own custom network layer for client -> server anyway, why wouldn''t you just use the same thing for server -> server. you are almost definitely going to make something that''s more efficient than Remoting even if you are a novice (er...kinda loaded potentially untrue statement but just ignore if it makes you angry .

the key for network gaming stuff is to divide things between "needs to be guaranteed" (need to use TCP) versus "does not need to be guaranteed" (can use UDP). TCP is significantly slower than UDP b/c it involves back communication i.e. "sending packet" "packet recieved" type of communication. even your server -> server stuff is going to have both kinds of information.

and you really don''t want the server -> server stuff to be lagged just as much as you don''t want the client -> server stuff to be lagged. a bottle neck is still a bottleneck even if it''s on the server -> server level. make it all as efficient as possible.

i''m just knee-jerking against using something like .NET remoting b/c as i previously mentioned i really don''t think that it was designed for the type of performance that you are going to need. but then i also don''t really know anything about it cept it''s made by MS and they''re known for bloatyness that''s great for convienence but not necessarily for performance (see MFC).

-me
Well the only reason I was considering using Remoting was because every major MMOG engine''s major features include object sharing because it allows for load-balancing, efficcient information sharing and ease of use. I happen to be programming in a windows environment so I want to use something that can be used in any language. Right now...believe it or not...I''m doing this in VB.NET. Yes, its slower, no its not THAT slow, and yes it will be sufficient because there is no way I will make a game that will ever become popular enough to have 1000 players per server. So basically I want to find an alternative to CORBA that is usuable in VB and .NET Remoting seems to be the answer.

BTW...I have expereince with programming my own client-server programs in Winsock(API and OCX) so I understand thoroughly TCP''s and UDP''s role in a game. I''ve used both in simple games and understand how they work together quite well. Anyways...maybe someone can suggest a reason why all the MMOG engines use remote object sharing if its unneccisary.

Thanks,
Synth0id
There is no point in doing anything at all, you'll die pretty soon anyway.
What kind of remote object sharing do they use?
Star Dart - Java Multiplayer Space Combat at http://www.stardart.net/
i dont know what kind of sharing the servers will be doing...i''m assuming it''d be a regional zone configuration. therefore, if your having the players switching servers and the transfer of info is lagged, there may be a problem lag time in your protocol for switching servers? also, if you plan on having players in zone A visible to players in zone B, that''d probably require a lot of information processing. while it may not seem like that many updates, when you have 500+ people, not to mention npcs having to be updated...you''d want an efficient stream. finally, I do not know that much about dplay but I''d assume it will be a lot slower than pure winsock (which if you look at some of the online tutorials is not very intimidating..you could probably learn it in the time it took to discuss this). you meantion all other major MMORPGs, well most of the ones I know pretty much use winsock. and also if memory is correct, AO had a horrible opening because they implemented a horrible protocol over TCP (with crap options on) and many people laged out. just trying to help, good luck with your game.
quote:I''m doing this in VB.NET. Yes, its slower, no its not THAT slow, and yes it will be sufficient because there is no way I will make a game that will ever become popular enough to have 1000 players per server.


Well, is this a M MOG or isn''t it? You asked about games that have 1,000 players but you rebuff people who make suggestions pertaining to that size.
Star Dart - Java Multiplayer Space Combat at http://www.stardart.net/
If you guys were following his posts you would realise that it is only the servers that will be sharing certain objects for load-balancing purposes. TCP + the Binary Formatter are quite efficient, about DCOM levels (but without the programming hassle.) Writing your own object sharing code is no small task, especially if you plan on doing it correctly.

Further more, VB.NET is far from being slow. It is compiled into CIL which, in turn, will be JIT-compiled as the methods are invoked. Since this is a server, the methods will not need to be JIT-compiled again until the server is restarted. VB.NET might not be at the same speed as C++ but it is hell of a lot faster than VB 6 (and probably on the same level as C#.)

[edited by - Digitalfiend on December 4, 2002 11:03:33 AM]
[email=direwolf@digitalfiends.com]Dire Wolf[/email]
www.digitalfiends.com

This topic is closed to new replies.

Advertisement