KingNetwork
v1.0.3 - Pool implementation and simple code refactor.
Пример Unity для кубов
Королевский сервер
https://www.nuget.org/packages/KingNetwork.Server/
Король Клиент
https://www.nuget.org/packages/KingNetwork.Client/
Король поделился
https://www.nuget.org/packages/KingNetwork.Shared/
// create and start the async server
var server = new KingServer ( port : 7171 ) ;
server . MessageReceivedHandler = OnMessageReceived ;
//ASync execution
await server . StartAsync ( ) ; //You can pass a out var cancellationToken in parameter
//Sync execution
server . Start ( ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IClient client , IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from client { client . Id } , data length { reader . Length ( ) } " ) ;
}
// send a message to all clients
using ( var writer = KingBufferWriter . Create ( ) )
{
writer . Write ( "Test message!" ) ;
server . SendMessageToAll ( writer ) ;
}
// stop the server when you don't need it anymore
server . Stop ( ) ;
// create and connect the client
var client = new KingClient ( ) ;
client . MessageReceivedHandler = OnMessageReceived ;
client . Connect ( "127.0.0.1" , 7171 ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from server, data length { reader . Length ( ) } " ) ;
}
/// send a message to server
using ( var writer = KingBufferWriter . Create ( )
{
writer . Write ( "Test message!" ) ;
client . SendMessage ( writer ) ;
}
// disconnect from the server when we are done
client . Disconnect ( ) ;
// create and start the server
var server = new KingServer ( listenerType : NetworkListenerType . UDP , port : 7171 ) ;
server . MessageReceivedHandler = OnMessageReceived ;
//ASync execution
await server . StartAsync ( ) ; //You can pass a out var cancellationToken in parameter
//Sync execution
server . Start ( ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IClient client , IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from client { client . Id } , data length { reader . Length ( ) } " ) ;
}
// send a message to all clients
using ( var writer = KingBufferWriter . Create ( ) )
{
writer . Write ( "Test message!" ) ;
server . SendMessageToAll ( writer ) ;
}
// stop the server when you don't need it anymore
server . Stop ( ) ;
// create and connect the client
var client = new KingClient ( listenerType : NetworkListenerType . UDP ) ;
client . MessageReceivedHandler = OnMessageReceived ;
client . Connect ( "127.0.0.1" , 7171 ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from server, data length { reader . Length ( ) } " ) ;
}
/// send a message to server
using ( var writer = KingBufferWriter . Create ( )
{
writer . Write ( "Test message!" ) ;
client . SendMessage ( writer ) ;
}
// disconnect from the server when we are done
client . Disconnect ( ) ;
// create and start the server
var server = new KingServer ( listenerType : NetworkListenerType . RUDP , port : 7171 ) ;
server . MessageReceivedHandler = OnMessageReceived ;
//ASync execution
await server . StartAsync ( ) ; //You can pass a out var cancellationToken in parameter
//Sync execution
server . Start ( ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IClient client , IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from client { client . Id } , data length { reader . Length ( ) } " ) ;
}
// send a message to all clients
using ( var writer = KingBufferWriter . Create ( ) )
{
writer . Write ( "Test message!" ) ;
//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages
server . SendMessageToAll ( writer , RudpMessageType . Reliable ) ;
}
// stop the server when you don't need it anymore
server . Stop ( ) ;
// create and connect the client
var client = new KingClient ( listenerType : NetworkListenerType . RUDP ) ;
client . MessageReceivedHandler = OnMessageReceived ;
client . Connect ( "127.0.0.1" , 7171 ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from server, data length { reader . Length ( ) } " ) ;
}
/// send a message to server
using ( var writer = KingBufferWriter . Create ( )
{
writer . Write ( "Test message!" ) ;
//You can use RudpMessageType.Reliable to send Reliable messages and RudpMessageType.Unreliable to send Unreliable messages
client . SendMessage ( writer , RudpMessageType . Reliable ) ;
}
// disconnect from the server when we are done
client . Disconnect ( ) ;
// create and start the server
var server = new KingServer ( listenerType : NetworkListenerType . WSText , port : 7171 ) ; // Or NetworkListenerType.WSBinary
server . MessageReceivedHandler = OnMessageReceived ;
//ASync execution
await server . StartAsync ( ) ; //You can pass a out var cancellationToken in parameter
//Sync execution
server . Start ( ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IClient client , IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from client { client . Id } , data length { reader . Length ( ) } " ) ;
}
// send a message to all clients
using ( var writer = KingBufferWriter . Create ( ) )
{
writer . Write ( "Test message!" ) ;
server . SendMessageToAll ( writer ) ;
}
// stop the server when you don't need it anymore
server . Stop ( ) ;
// create and connect the client
var client = new KingClient ( listenerType : NetworkListenerType . WSText ) ; // Or NetworkListenerType.WSBinary
client . MessageReceivedHandler = OnMessageReceived ;
client . Connect ( "127.0.0.1" , 7171 ) ;
// implements the callback for MessageReceivedHandler
private void OnMessageReceived ( IKingBufferReader reader )
{
Console . WriteLine ( $ "Received data from server, data length { reader . Length ( ) } " ) ;
}
/// send a message to server
using ( var writer = KingBufferWriter . Create ( )
{
writer . Write ( "Test message!" ) ;
client . SendMessage ( writer ) ;
}
// disconnect from the server when we are done
client . Disconnect ( ) ;
Проверка соединений
Мы также тестируем только необработанную библиотеку KingNetwork, создавая 1 сервер и 1000 клиентов, каждый клиент отправляет 100 байтов 14 раз в секунду, а сервер отправляет одно и то же сообщение обратно каждому клиенту. Тестовый компьютер: Acer F 15 с процессором Intel Core i7 7-го поколения с тактовой частотой 2,9 ГГц и оперативной памятью DDR4 объемом 32 ГБ.
Результаты испытаний:
Клиенты | Использование ЦП | Использование оперативной памяти | Пропускная способность клиента+сервера | Результат |
---|---|---|---|---|
64 | 0,5% | 9 МБ | 0,3 МБ/с | Прошедший |
128 | 1% | 10 МБ | 0,7 МБ/с | Прошедший |
500 | 18% | 18 МБ | 2~3 МБ/с | Прошедший |
1000 | 32% | 26 МБ | 5~6 МБ/с | Прошедший |