When you look for resources on *Node* a lot of it are mostly centric on the 
*web* (*http*). But *Node* is more than the *web*, so I wish there are also 
more focus on the other aspect of *Node's* networking capabilities other 
than *http*.

When working on a *Game Server *you need high concurrency and also some 
calculations. Some of the important points on game server development are:


   - Receive
   - Frame
   - Decrypt (because it's always encrypted from the client)
   - Deserialise (we still use binary when passing data NOT JSON)
   - Handle
   - Encrypt
   - Serialise
   - Send

The list above it what happens for every incoming request from the client, 
and that is just the tip. Imagine 200 concurrent players on the same area, 
when 1 player moves, this update gets sent to all other 199 players. Server 
receives one packet, sends out 199 packets. If all players walk 5 steps, 5 
steps = 5 packets, 5 packets * 200 players = *1,000* incoming packets. 
1,000 * 200 = *200,000* outgoing packets. This can all happen in 1 second, 
and should be smooth in each players perspective.

Questions:


   - Is it true that one should keep callbacks/functions short to avoid 
   blocking the event loop too long? How short should it be?
   - When decrypting/deserialising/encrypting buffers (cpu calculations 
   heavy, custom routines) should I use a C++ add-on? Should I use pure 
   javascript and pass each task to a child process?
   - serialising is like converting a JSON structure into a buffer, should 
   I use the node buffer, an array or a typed array?

Currently I am thinking of doing something like this to handle JSON to 
buffer.

obj = 

  id: 1,

  name: "obj" 


> arr = []

for k in obj

  v = k[obj]

  if v instanceof String

    for i < v.length; i++

       arr.push(v[i])

  else 

     arr.push(v)

return new Buffer(arr)

 
This way I wont have to define the buffer length first. But is this proper? 
Of course I left out the part about doing stuff like:

serialize.uint16le = function(val) {
>   var binary = [];
>   binary[0] = val & 0xff;
>   binary[1] = (val >> 8) & 0xff;
>   return binary;
> };

deserialize.uint16le = function(pointer, buffer) {
>   var binary = buffer[pointer.offset++];
>   binary |= buffer[pointer.offset++] << 8;
>   binary >>>= 0;
>   return binary;
> }; 


But how will this fair performance-wise against just using the built-in 
buffer methods? 

In *MMOG*, performance is one of the make or break for games. Slow or laggy 
games will make the players loose interest. I'm talking about heavy lag 
because the server is getting slower, not because of network problems.

Cheers,
Maj

PS. I'm just a *MMOG* server hobbyist.

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/a3f124d5-1e80-4924-871a-5755d3ec7ace%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to