Online games system design frontend PART 1 | online game software architecture

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello everyone my name is Mary and in this session let's learn system design for massive multiplayer online games systems like pop G or Call of Duty these are very few examples but there are tons of massive money in these days so this particular video is recorded or broken into two different videos the first video talks are not about client-side architecture that is the actual game which is installed on your phone on your xbox or pc the second video talks about the server-side architecture you might be wondering why should I learn about the client-side or the actual game functionality it is very crucial for you as a back into order system engineer or an architect we should understand how game functionality works with that you will know how frequently we can send the data over the network how to compress the data or how to do the interpolation or approximation and all sort of things it is very crucial for you to understand the whole system to do the system design so let's start to learn how the game works I'm not going to talk a lot about how exactly the game works but instead I'll tell you or I will explain you some of the core concepts which will enlighten cyou on how these games work out what are the things which we need to concentrate or give much emphasized before we do the system design so let's know a little bit about how the basic or any game works any game will have three different functionality the first one is the game roll okay inside the game loop there are three main functional and functionality so the first one is taking the user input and the second one is updating the stage of the game and the third one is rendering the game okay so they came blue which will be keep on working in a while loop or infinite in an infinite clue will be calling these three functioning frequently so this is the basic structure each of these function will have its own complex logic inside of it okay say for example this particular clip which I'm showing right now could have been designed using unity framework or Unreal Engine or something like that what you can see over here is like each and everything say for example the player who is running with a gun holding in his and on a grassland and there is a you know power line there is bombs blasting right if you think all of these are different different objects if you use unity or Unreal Engine you don't need to worry a lot about these objects because most of these objects are available in the framework or you have to tweak a bit and these objects are kind of handled by the framework itself all you need to do is write the code logic or the business logic or the how the game functions and also you need to have the lighting setup or the camera angle and all of these things it is much fun to another develop games using unity or Unreal Engine so what I was trying to say was in this particular clip you will see a lot of objects and a lot of things and these are all actual objects for class okay all this particular object will have a stay so when you take a user input from the very first function which are shown in the green dough user input build somehow translates or changes the state in the game okay that means that that state means objects state in that particular scene okay or in that particular game session so everything should be changed and also the state should be represented on the screen that's how you will see the game okay and often in multiplayer online games these states should also be replicated to other user because two players are playing from remote locations and these two players should see the same behavior of objects which is happening in that particular session so you need to replicate these state of a each and every object in the back and forth between the players to have a seamless experience the first and foremost thing before you do the system design for these kind of games is to understand what is the nature of game and how the user is in flight is going to interact with the game and what type of game it is majorly there are three different kind of games so the first one is a strategy game and the second one is float on gates and the third one is first-person games so the strategy games are something like dota our civilization 5 6 kind of games well you have a big scene in which you have army or you have a lot of tankers who are working or fighting in the world so if you see it looks something like this actually these kind of games are kind of difficult to design from the app perspective or the game perspective but from the back and perspective it is a lot easier compared to any other kind of games because all of these are just you know all these objects are tankers or the army are just playing on the scene right there is no real interaction happening in real time which complicates the backend system design ok and the second type is a turn-based game or slow turn game in which the good example is for example chess or poker in this say the skill if you see the poker game there are maker for different people who are playing this poker game right so if you understand this game every person has their own in a schedule time to play the game that means that the game will be keep on shifting from our person 1 or player 1 to play two player 3 and player 4 there is no conflicting or you know a race condition or some kind of conflict between two three players input because the inputs are properly scheduled okay first player one we play and player two will play and then player 3 will play and then pay for so handling the data moment is a lot easier even though all these players are playing from remote location because we know that now we need to get the data from play one get the data and synchronize across each and every player from the player to when histone for the game get the data from him and then replicate the data to all of the other three different player and save a copy in the server also so this is kind of easier because you have enough time to get the data from player and to send it to all the other players it hardly takes about a couple of milliseconds right and that is fine okay we have I mean we can bear that millisecond gap between transition of turns from player want to play it - and play - to play three so this is fine this is still easier to implement from the backend perspective and also from the front end perspective and the next kind of game is first-person games the famous ones are these days pochi or you know csgo or Call of Duty etc right in these games the problem is there like a couple of players who are playing together and there are lot of real-time interaction happening between the player say for example player one he is should be player two okay if you shoot now if he is aiming perfectly at the other person the others the player should be dead by now okay there's only fraction of time which is left between player want to play - to sync the data right so these kind of games are tough to handle consider the case of pop G itself so initially they will drop a hundred people on to an island right so if you need to keep on synchronizing the data or the input from all the hundred people and then keep on replicating the scene to all the hundred people back or say now play one consider all the hundred people are standing in a same scene so if what if a guy does something the same thing should happen for all the hundred people who are playing that game so let's understand how these kind of systems are built and what are the problems we're gonna face and how do we solve these problems now that you learned the difficulties of first player games we're sending messages between a couple of players is difficult and we also need to keep the latency minimal to understand it better let's go to the core concept of how the latencies are added up in the process of making calls between players to server and server to player suppose we want to send message from San Francisco to New York a player from San Francisco is trying to send a message to the server and we are samplers has gone you are key separated by distance of four thousand kilometer we use copper wires or optical fibres to send the information from place to another place right it all works in the speed of light okay nothing can travel more than speed of light that is three point three to 10 power 8 meter per second even though light takes 30 milliseconds to reach from San Francisco to your that means that there is a inherent latency we can't send the information you know less than this particular time that is self millisecond so what do we do we don't have any other choice other than we make our system enormously it in ideal situation from San Francisco to New York it doesn't actually take 4000 kilometer this is a shortest path or displacement but in actual network cables or how the cables are laid out on the sea or between cities it takes even more than for more than 4,000 kilometer that is equal to 6000 kilometer and also on the way should all the package and packets or the data should also go to lot of routers and repeaters and these devices need to unpack the packet and check verify and redirect the packets right in that case they also had a couple of millisecond latency so it will not be exactly that it bit second it would be a lot greater than 30 minute second it could be 20 or it could be 30 millisecond suppose in one more example say player one is trying to play one and player two are trying to play a game this particular server is helping them how to play the game best case is that player one is 50 millisecond away from the server and also player to these kind of 50 millisecond away from the server which is supporting the game now what is the total latency which any input from player 2 to replicate it to the player 1 or any information in the player 2 to send it back to the player 1 or any number of other players so how much time you take it is calculated like from the latency which is taken from player 2 to the server that is 50 millisecond and the server should also off take the stage and do some kind of processes so let's take it takes hundred milliseconds on our best case and then it needs to transmit back this particular message which it received from player 2 to play one or any number of other players that will take another 50 millisecond that means that at least there is 200 milliseconds of latency to send the information or the input given by the player 2 or the state of the player 2 to any number of other place in this case player 1 that means that look at this demo in this case the way ball represent the player 2 and the blue ball represent the player 1 you know it at least takes some 200 millisecond delay to send the data from blue ball or the blue player to the red player so if you see here the ball moves from the plate blue player first and then the board moves from the red player that means the dailies are little late it's what it shows is when we are playing the online games we can't replicate the state of other players to any given player in real time there is always a little latency if I press an up arrow and my player will or my game character will jump on my screen immediately but it will take 200 millisecond for my character to jump on any of the other players who are playing with me so there is a inherited latency so now we know the latency problem think we have even more players like one more player over here that is layer 2 and layer 3 not me no the latency problems so one way to solve that is why me you know introducing a server in the middle ok what if these players are somewhere nearby or playing from the same place or somewhere nearby so what if the natives between these players are a lot lesser say for example what if the limits of trains player 1 and player 2 is something like 10 millisecond when we connect these two player directly and also what if player 2 and sorry this will be player 3 and this will be player 4 what if the latency between page 1 player four is about 20 milliseconds or between these is about again 10 millisecond why don't we just let these players which the game they have installed on their phones or the tablets or the PCs talk to the other players directly like peer-to-peer connection and then play yes that is possible and some of the games are doing that way but the problem is you can't trust these players ok this might work faster and this might be simpler and you don't need server to play but the problem is you can't trust these players why what if this particular player has hacked this particular game and has understood the game or he has built some automation like say selenium or some scripting to use the control the game character over here and then so do some kind of updates or they can even teleport character from a given location say if the location of a particular character is at 1 comma 1 in a matrix you can update the code or the script which is running in his phone to suddenly jump it to something like hundred c'mon that is like if I was playing normally I should have hit 100 times the apparel or the left or the navigation buttons but in this case just because he hacked the player has teleported to 100 comma hundred just like that so what happens is for everyone this pair will jump immediately from one comma one 200 comadre and that is bad the the total you know multiplayer gaming experience will be ruined just because of one player has done some kind of hacking to the game client and then he is driving the character crazy so to stop all of this we obviously need a guy who manages monitors or authoritative guy who sits in between these players to validate what's happening in the game so we need a server and this server is called as authoritative server ok what the server does is he's the guy who collects all the players is like a pub who connects all these players together and then he holds the session information or the maximum number of players can be played in the game you can't just let 1 lakh people who play pop G in in an island see because they'll be like crowded ok you don't even have an no proper gaming experience so pop G on an island it will only allow up to 100 or 150 I don't know the exact number so that number seems fair even if you are designing something you should be having a hard limit of how many players will be playing on a given map so that these are the things you can handle on these authoritative server we need this ok what this server also does is he will be running a copy of the same game which everyone is running on their devices so he will be having the same game engine which is running in the authoritative server say suppose this stay more from 1 comma 1 2 instead of moving 200 under so he moves to 1 comma 2 that means the state information will be sent to the authoritative server and here in this game engine which is running in that priority server it appears the player to move from one common 1 to 1 comma 2 only when the acknowledgement are you own even though it happens here this state will be replicated to all the other peers and the player 2 in these games are in these particular devices will be updated to 1 comma 2 and these authoritative action will be taken by this guy ok the server if he does some hacking ok from moving this player from 1 comma 1 to 100 comma hundred this authoritative server will try to replicate the same input input given say for example he gives like some editing ok he does some editing in the game script or something and then we try to move here but I will be no in our game engine that it is not possible because at any given point of time if he presses the up arrow or something you can just fly from one come over 200 so he knows that at any given point we can just move one step ahead so he will instead of updating the authority server instead of updating the player true from 1 comma 1 to 100 commander he will just update to 1 comma 2 because he knows that it is impossible and the same event or the the position of player 2 will be sent to everyone even though this guy sees that his player has more 200 comma hundred but others will be seeing the player in cut position and also the games will have intelligent that even though some something like this happens with a response which it gets from the 32 several if you come back to 1 comma 2 ok and that is the reason why you need server in between now let's learn how to deal with the network so if you want to send information from point A to point B or playroom to play to how to send it more efficiently or how do we optimize the bandwidth so that the information can be sent much faster from player 1 to play a 2 and what are the strategies so deterministic lockstep is a method of networking between two computers in which we only send the inputs which controls this system so no more I know nothing more information we just send only the inputs which controls that particular game say for example so we have two parties ok so the player 1 and we have player 2 or we have the server you can think of player 2 our server so we just want to send this information from day 1 to play it - ok now what is deterministic lockstep spaces instead of sending this particular players orientation position or anything like that just send the input given to this particular player or the player who is playing this particular game and you just need to set the information like did the user or did the gamer or the player 1 press the uparrow space or any other controls for the mouse click or something so you just need to send that information over the Internet or over the network to the server or to the other player so that way the information which we are sending or transmitting from player want to play - easy or not minimal it just says whether this particular key was pressed or not in that information we can also encode in just bits okay consider this built represents about this balloons down arrow this left this right this is spacebar to say this is a this is s D like that okay so each bit we can include basically like with 26 bits we can include all the alphabetical orders with another 10 bits you can include special characters with another 10 it can include all the different kind of key combinations like up-down page-off page-off right so it comes around just couple of chords like how much 5 bytes 5 bits is nothing when we are transmitting data between two parties over the network we can just send this data a lot faster ok and quicker so the advantage is we are sending way small chunk of data between these pockets and there's much faster otherwise we should have sent State orientation position at which the particular game character is standing and everything and that is hard and that takes a lot of bandwidth because we need to send X Y Direction and all the other you know calculus say if there's a glass around or if there's a tree or if there's something else right so we need to send all the position so it's worth doing that if it's saying only the inputs given to this particular system we can actually simulate the same environment on the other side so if you have a this input to the same player to over there it just updates all the other objects around it based on its interaction with the system in this demo which this cube is doing rolls and gems and although this sort of trick ok in this case this simulation is built using deterministic lockstep and the simulation on the left is controlled by the player and the simulation on the right is the input which was sent from left player to the right player over the network ok and and the network delay was about two seconds just to show you guys that how deterministic lockstep will work ok so if you see so the information sent between left to the right was only the state of case that affected the summation on the left side and also in this demo the data which was sent from the left side exactly sent to the right side which also includes the frame information which is necessary to simulate the inputs given by the left player and we need to simulate the same way in for the right player also ok and how frequently we need to do keep on sampling these inputs given to the system suppose in this case we are sampling about 60 times per second now you just saw the demo for the deterministic lockstep it might work in a very good environment or very good Network without any delays or packet drops or lags but I'll can you sort the scenarios where it won't work we use TCP connection between player on play - so any input which we send is also as a packets right ok what if for some reason like ok what if the bandwidth was very less in between when the package is going to the p2 in this case this packets might get delayed in that case this player one will wait the information for the player 1 will not be arrived at the exact time or for exact frame play to will be playing anyway but the player Bunz data is hazard rate all right so in that case this player will be like going in steps something like that so that's not a good experience by using TCP we are incorporating certain lag and jitter how I will explain and also the second solution what we can use is play out delay buffer ok and a st. Clair of buffer first and then will you go in-depth on how we can remove PCP and then use something else to make this you know sending that data and moving the player smoothly so first let's talk about player tougher so if you see YouTube or Netflix they're also the same problem right every video frame or the later end of the video will be sent over the package in that case if there is a lag or if there is a packet draw or if there is a bandwidth issue then you will see that the video is offering to stop that what these guys do does is they will preload 10 seconds of video or about 5 seconds of video preload and then they will start to play that way you always have 5 seconds of video in the buffer even if the packet is getting delayed by one second because of some reason you will never see that lag or some kind of you know buffering or something like that so the same thing we can do in gaming also what we can do is so we know that in order from our previous explanation we know that we are posting about if I send a package here I really really see what 200 millisecond but for some time some packets might take more than this or less than that also so how do we incorporate player offer what we do is on the other side on the juice I will have a buffer we will save this packets ok for 50 millisecond so we are adding extra 50 millisecond and that's fine to give better experience so we will Park all these packets we just received up to 50 millisecond that way we have enough data to smoothly move this player without having any jitter or lag so we will have a buffer on the player to sign and vivid park for 50 millisecond and then we'll play the or we will simulate the player okay so now the total lag is 2 millisecond and that's fine we are sacrificing 50 millisecond for you know seamless experience and that's what it is called a split for and the second one is PCP connection so the problem with the TCP connection is say for example I have these four packets so this was packed with 192 packet 3 and packet for okay now packet one that I have say consider that I said tactic one I can arrive at the p2 okay well good so we can simulate something I kept - for some reason packet 2 was dropped or somehow this packet - was lost but packet 3 and packet for is available because TCP ensures that the packets arrived at an order and it is reliable it won't allow you to access 3 and 4 until this packet is retransmitted from p1 back to p2 that means that to access this data somehow this guy should learn by the acknowledgement sent by p2 and then you should know that p2 was lost and then you should set it will take a lot of extra time so what happens is when we send acknowledgment for one and they also send for a 23 even though we are not able to access the system which said that punishment that's when it learns that acknowledgement for packet 2 was not received so he will be transmitted I think through ok so when the packet 2 is received that's when we receive the packet 2 and then we'd say package G and packaged food so it took you know round-trip time total round-trip time okay like going by the acknowledgment and then the retransmitting packet to it you know about 400 milliseconds more to me see this particular packet so player here was stuck for 400 millisecond just because one packet was drawn even though we have four and three packets available we couldn't do anything because packet 2 was lost so let's don't use TCP then what are the other options we can use why don't we try UDP protocol so unity as you know it's not connection-oriented protocol or it is not really and it doesn't send a comment or something like that the header size of unity is also less that way we will say something on bandwidth okay yeah Judy please Commission less TCB's connection-oriented so being happy liberate you didi so let's see it how we can use UDP to make our gaming experience better okay so consider type and T P 1 or 1 we have input 1 I'm trying to we have input 2 time 3 we have input 3 so how do you send the data reliably over UDP since you DB doesn't send acknowledgements panic and it is under level and it is connectionless how do we send this data so that we won't lose any of the data so the check is instead of just sending ok we have if it was tcp would have had three different packets another just for our elevation purpose i would have sent the data so in each package we used to send you know input 1 input 2 it could read something like that but in case a few pieces we don't know how many packets will be launched or something like that so deliberately put more information say so this packet first packet will have I 1 that is input 1 so it is sent so first packet - in the second package so instead of having just I too will have I 1 and I 2 so we have you know redundant information in the third packet say we have I 2 and I 3 so that way say maybe I 1 also so in that way even if these two packets are dropped we still get this david package and we have all the input we can reconstruct with every input we also have captured you know times time or the sequence number of things would say we also have time span also have sequence number x + 2 x + 3 we have a different sequence number based on the x times or the sequence number we can recreate or we will easily know that forgiveness simple was supposed to be recreated at this time or this this pin or disorder so that way we can make this most smoothly in this particular view you will notice packets are dropped we can still access this package and no need to re transmit this package back even though we have some mechanism to understand and retransmit we don't need to wait to access this data and like TCP so that way we can make things better and here is the demo in which you can see these cubes you know simulated using the UDP so unlike the last demo which was on TCP which had only 5% packet loss and to 50 millisecond delay but this demo is having about 25% packet loss and also we have incorporated 2 second delay so the data which is sent from the left to right is having a delay of about 2 second and there is about 25% packet loss even though you can see how we do believe it what enables us to blend you know exactly the way of the data while stayed in the left side we were able to submit on the right side so so far we'll learn deterministic lockstep deterministic lockstep worse but the only problem is the input from the player 1 and player toward vice-versa should be properly synced ok if we screw up in the timing or syncing the simulation waves if we vary the simulation at any given frame the total simulation of the environment will you go for a toss that simulation will never match with player 1 and player 2 because we screwed up in one input even though if we delay by a couple of milliseconds the total simulation of the environment will differ say for example this particular image right so this is the end result of the deterministic lockstep if you see the cubes are later they are not matching the scene the player one scene and the plane to seen or not matching because the cubes are little cubes are not properly arranged right so what are the other possibilities in which we can sync the data between players more efficiently and it lessens are worried about syncing the exact information you hadn't given specific time intervals and without losing any of the assimilation no without causing any of the simulation differences between players so one possible way is using the state synchronization and as the name says we actually synchronize the state of each and every object in the you know particular games itself are the objects which are affected by that particular player okay so how does this work so in this case every object in the game is kind of actual object of a class file so so we just need to sync the data like position orientation linear velocity and angular velocity color or any of its feature characteristics so all that kind of data we need to keep on synchronized between different layers so that they at any given point of time we know even though we have launched all the data for the past data we can with the existing state information we can just recreate the scene using that state information of each and every object in this case even though we have lost considered we have lost all the data from the previous if I know the state information of each and every small cubes and the state information of the big Q I can just read that state information under it can we create the you know scene easily I know this Q was supposed to be in this position and this mod Q was supposed to be flying and this Q was supposed to be oriented this way and placed in this particular position that way state synchronization is very better we can correct the game C at any given time the only problem is if you see each object will have these much this much data and all this data is kind of integers and different data types ID so each state will have cadiz order know at least some bytes of data so in case of deterministic lockstep we are just sending inputted I it used to be in bytes right now we are dealing with kilobytes per object so the data would be in terms of mb/s you know at any given part of time the data will be the bandwidth which we required it will be in terms of like 15 megabytes per second or 20 in the per second like that but that is without some other tricks of light something like quantization and compression if you use these tricks on these state information we can actually compress this data into kbps and now you might be thinking since we have state synchronization we have each and every object's state and we will not have any other problems but it's not like that way even though we have the you know state information of each and every object and they are synchronizing state we will have jitters and lagging problem you know why say for example we are sending the state as you know information every you know 60 times a second that is like almost like 60 times a second still we will have the jitter so how do we solve we have to some have some kind of prediction by using the existing state of the player say say suppose we have a car which is running and we are sinking the state information of the car 60 times a second still we have this lagging because of the connection bandwidth issues or that gap between the 60th one by 60th of a second we will see that jitter right the car moves in steps but that's not good so how do we make this car move a lot smoother without having you know without this car taking steps when hasn't made me sing state information how do we do that for that we need to kind of have some kind of prediction can be predicted say for example if a car is a having you know linear velocity or the acceleration data available in that particular cars object state we can kind you know predict for the next one by 60 seconds you know moment okay so if the car is traveling at 200 kilometer per second you know under 2 meter per hour in that case we can somehow move the car for another one by 60th of the second without even we assume the data from the other so we kind of somehow predicting how this object or particular player might behave with the previous information or historical information we have so far and there are so many tricks or different kind of techniques on how we can predict the players movement now let's learn how do we handle the gamestate okay for this example in this clip if you see everything is an object I have already told you a player grass a bomb a fire truck or gun everything is an object so every object actually takes some kind of inputs it all physics light every object takes some kind of input of force or any input and then it should also respond for that input that and also sometimes these objects will update the state of other objects so there is a lot of dependency basically if for simplicity we can take it as it takes input it also updates a state and also if we have something so there are a couple of actions happening here say for example a player so there is something like Mario and there is you know Mario okay standing on the floor so now just for the simplicity sake how difficult it is to handle suppose if I press up arrow this Mario Mario should chain okay say he will be here so he's in the jumping state now now what are the possible cases we should handle at this state is if a player presses up arrow again he should be jumping again and again because that's not how any you know person or a player behaves he can't fly right because he doesn't have wing how are you press the down arrow he can't just drop it like that he should be normally landing at some projection right and also when he's on the air if you press spacebar maybe he should be ducking or should be like acting like he is sitting so we shouldn't be allowing further Jen he should we should be allowing him to sit no but he should be he can fire but he can fire from air right so that is all he can fire so there are different complex if one else's fight so if he is jumping we can't make him jump again if he is jumping we can't make him say if he is jumping it's okay to a load to fire so there are different kind of combination in any human state when he is standing on the floor so not not if side there okay so basically what I'm trying to say is there are a lot of scenarios to handle how do you do that one probability what we can do is very simple Lane kind of coding is a finances something like which I'm showing on the screen right now so it shows it has handled a lot of different scenarios okay if the key pressed is B and once again we are checking if he is jumping and if he is not ducking sorry if it is not jumping and if he is not ducking only then we can or we are allowed to alert we are allowing the player to jump if else what we're doing is if he is pressing down arrow if he and inside if he is not jumping generally we will allow it so similarly we have tons of conditions this way the code doesn't look neater we have to and it is not maintainable and it doesn't follow any kind of design pattern so how do we solve this problem if we carefully observed this explanation which I have explained every time a player is in a particular state now he's in status eight and he is in jumping State and he is landing okay so there are different state he is the expanding state and his jumping State okay so you are hearing a lot of work you know word called a state state state that actually kind of should give you clue that we should have some kind of state machine so every player at every given point of time should have its own state say take myself okay I am standing so I mean a state which isn't standing if I am swimming I'll be in a state where it is swimming okay in each state we can in define their own possibility of actions and that way it is a lot easier to model the state of any given player it looks something like this okay so to explain further a better approach is you state machine right and each state is defined it in its own classes state pattern is a behavioral software design pattern that implements a state machine in object-oriented way and how do we implement this state machine or called state you know pattern so for that first we need to have a interface okay this is called as a player state in which it defines handle input and also it defines update okay these are the two methods as I already mentioned every object should take some input and it should behave or should update the state of other objects which are you know surrounding to it okay so that way so for simplicity we are just defining two different methods in the interface so every state in here should implement its own classes in this case maybe no standing state will have its own class and the class looks something like this okay and now we have all the different kind of states now how do we delegate the state for that we'll have to build a player okay player is also again class we can create as many players we want by instantiating this particle class and each player will have its own state so when the game starts maybe by default the player is stunning so we will as I in the state equals to stand state and further when the game progresses the state will change based on the input given to that particular player and how he reacts to the environment and that's how we should be implementing using state pattern and I think I'm pretty much covered a lot about how we should think from the game client perspective and in the next video we will learn how from the backend how do we handle all of these different scenarios or state update or have a lower balance how do we make users join and play games seamlessly so if you liked this video please subscribe to my channel this actually helps and encourages me to produce a lot of system design videos and please tell your friends to subscribe to this channel and if you have an assertion please do write comments and also if you like this video please tell me what I can also improve in my videos thank you
Info
Channel: Tech Dummies Narendra L
Views: 40,971
Rating: 4.9247313 out of 5
Keywords: Amazon interview question, interview questions, interview preparations, algo and ds interview question, software interview preparation, developer interview questions, Facebook interview question, google interview question, massive multiplayer online games system design, mmo games architecture, mmo games system design, multiplayer games system design, games system design, how games works, games internals, mmo games software architecture, games software architecture
Id: EU81tjgoKoI
Channel Id: undefined
Length: 45min 59sec (2759 seconds)
Published: Wed Oct 17 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.