Cubes Unity Example
King Server
https://www.nuget.org/packages/KingNetwork.Server/
King Client
https://www.nuget.org/packages/KingNetwork.Client/
King Shared
https://www.nuget.org/packages/KingNetwork.Shared/
// create and start the async servervarserver=newKingServer(port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();// create and connect the clientvarclient=newKingClient();client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.Disconnect();// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.UDP,port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.UDP);client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.Disconnect();// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.RUDP,port:7171);server.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messagesserver.SendMessageToAll(writer,RudpMessageType.Reliable);}// stop the server when you don't need it anymoreserver.Stop();// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.RUDP);client.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messagesclient.SendMessage(writer,RudpMessageType.Reliable);}// disconnect from the server when we are doneclient.Disconnect();// create and start the servervarserver=newKingServer(listenerType:NetworkListenerType.WSText,port:7171);// Or NetworkListenerType.WSBinaryserver.MessageReceivedHandler=OnMessageReceived;//ASync executionawaitserver.StartAsync();//You can pass a out var cancellationToken in parameter//Sync executionserver.Start();// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IClientclient,IKingBufferReaderreader){Console.WriteLine($"Received data from client {client.Id}, data length {reader.Length()}");}// send a message to all clientsusing(varwriter=KingBufferWriter.Create()){writer.Write("Test message!");server.SendMessageToAll(writer);}// stop the server when you don't need it anymoreserver.Stop();// create and connect the clientvarclient=newKingClient(listenerType:NetworkListenerType.WSText);// Or NetworkListenerType.WSBinaryclient.MessageReceivedHandler=OnMessageReceived;client.Connect("127.0.0.1",7171);// implements the callback for MessageReceivedHandlerprivatevoidOnMessageReceived(IKingBufferReaderreader){Console.WriteLine($"Received data from server, data length {reader.Length()}");}/// send a message to serverusing(varwriter=KingBufferWriter.Create(){writer.Write("Test message!");
client.SendMessage(writer);}// disconnect from the server when we are doneclient.Disconnect();Connections Test
We also test only the raw KingNetwork library by spawing 1 server and 1000 clients, each client sending 100 bytes 14 times per second and the server echoing the same message back to each client.
Test Computer: Acer F 15 with a 2,9 GHz Intel Core i7 7gen processor and 32 GB ram DDR4.
Test Results:
| Clients | CPU Usage | Ram Usage | Bandwidth Client+Server | Result |
|---|---|---|---|---|
| 64 | 0.5% | 9 MB | 0.3 MB/s | Passed |
| 128 | 1% | 10 MB | 0.7 MB/s | Passed |
| 500 | 18% | 18 MB | 2~3 MB/s | Passed |
| 1000 | 32% | 26 MB | 5~6 MB/s | Passed |

