前言

.NET 生态中有哪些值得推荐的网络通信框架?今天,给大家推荐一个非常优秀的开源项目——NetCoreServer。

NetCoreServer 是一款 .NET 开源、免费、快速且低延迟的异步套接字服务器和客户端库。无论是需要搭建高性能的服务端应用,还是开发高效的客户端程序,NetCoreServer 都能提供强大的支持。

项目介绍

NetCoreServer 是一个高性能、跨平台的异步套接字服务器和客户端库。

它支持多种传输协议,包括 TCP、SSL、UDP、HTTP、HTTPS 和 WebSocket,提供了丰富的网络通信功能。

该库的设计初衷是解决高并发和低延迟的网络通信需求,采用了异步通信模型,能够高效处理大量连接和数据传输。

提供了丰富的示例包括 TCP 聊天服务器、SSL 聊天服务器和 UDP 回显服务器等多种应用场景。

项目特性

  • 跨平台:支持 Linux、macOS 和 Windows。
  • 异步通信:利用异步编程模式提高性能和响应性。
  • 多协议支持:支持 TCP、SSL、UDP、HTTP、HTTPS 和 WebSocket 协议。
  • 高性能:专为高性能通信设计,通过减少不必要的内存分配和 CPU 占用,以及优化网络 I/O 操作来提高性能。
  • 详细文档和示例:提供详细的文档和丰富的示例代码,帮助大家快速上手。

项目组件

  • TcpServer/TcpClient:用于处理 TCP 连接。
  • SslServer/SslClient:提供 SSL/TLS 加密的 TCP 连接。
  • UdpServer/UdpClient:支持 UDP 数据报传输。
  • WsServer/WsClient:支持 WebSocket 通信。
  • WssServer/WssClient:支持安全的 WebSocket(WebSocket Secure)通信。
  • UdsServer/UdsClient:支持 Unix Domain Socket 通信(仅限 Unix/Linux 系统)。
  • HttpServer/HttpClient:提供 HTTP 和 HTTPS 服务器的实现,支持静态内容服务和自定义请求处理。

项目环境

  • 操作系统:Linux、macOS、Windows
  • 开发环境:.NET 6.0、7-Zip、CMake、Git、Visual Studio

项目示例

  • TCP 聊天服务器、聊天客户端
  • SSL 聊天服务器、聊天客户端
  • UDP 回显服务器、回显客户端
  • UDP 组播服务器、组播客户端
  • Unix Domain Socket 聊天服务器、聊天客户端
  • 简单协议
  • 简单协议服务器、简单协议客户端
  • HTTP/HTTPS服务器、客户端
  • WebSocket 聊天服务器、聊天客户端
  • WebSocket 安全聊天服务器、安全聊天客户端

性能测试

1、往返测试

  • TCP/SSL/UDP 回显服务器
  • Unix Domain Socket 回显服务器
  • 简单协议服务器
  • WebSocket 回显服务器/安全回显服务器

2、组播测试

  • TCP/SSL/UDP 组播服务器
  • Unix Domain Socket 组播服务器
  • WebSocket 组播服务器/安全组播服务器

3、Web 服务器测试

  • HTTP/HTTPS 跟踪服务器

项目使用

1、TCP 聊天服务器

它处理多个 TCP 客户端会话,并将从任何会话接收到的消息广播到所有会话。另外,还可以直接从服务器发送管理员消息。

namespaceTcpChatServer
{
classChatSession : TcpSession
{
public ChatSession(TcpServer server) : base(server) {}protected override voidOnConnected()
{
Console.WriteLine($
"Chat TCP session with Id {Id} connected!");//发送欢迎消息 string message = "Hello from TCP chat! Please send a message or '!' to disconnect the client!";
SendAsync(message);
}
protected override voidOnDisconnected()
{
Console.WriteLine($
"Chat TCP session with Id {Id} disconnected!");
}
protected override void OnReceived(byte[] buffer, long offset, longsize)
{
string message = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
Console.WriteLine(
"Incoming:" +message);//向所有已连接的会话广播消息 Server.Multicast(message);//如果接收到的消息为 '!',则断开当前会话 if (message == "!")
Disconnect();
}
protected override voidOnError(SocketError error)
{
Console.WriteLine($
"Chat TCP session caught an error with code {error}");
}
}
classChatServer : TcpServer
{
public ChatServer(IPAddress address, int port) : base(address, port) {}protected override TcpSession CreateSession() { return new ChatSession(this); }protected override voidOnError(SocketError error)
{
Console.WriteLine($
"Chat TCP server caught an error with code {error}");
}
}
classProgram
{
static void Main(string[] args)
{
//TCP 服务器端口 int port = 1111;if (args.Length > 0)
port
= int.Parse(args[0]);

Console.WriteLine($
"TCP 服务器端口: {port}");

Console.WriteLine();
//创建一个新的 TCP 聊天服务器 var server = newChatServer(IPAddress.Any, port);//启动服务器 Console.Write("服务器启动中...");
server.Start();
Console.WriteLine(
"完成!");

Console.WriteLine(
"按 Enter 停止服务器或输入 '!' 重启服务器...");//执行文本输入 for(;;)
{
string line =Console.ReadLine();if (string.IsNullOrEmpty(line))break;//重启服务器 if (line == "!")
{
Console.Write(
"服务器重启中...");
server.Restart();
Console.WriteLine(
"完成!");continue;
}
//向所有会话广播管理员消息 line = "(admin)" +line;
server.Multicast(line);
}
//停止服务器 Console.Write("服务器停止中...");
server.Stop();
Console.WriteLine(
"完成!");
}
}
}

2、TCP 聊天客户端

它连接到 TCP 聊天服务器,允许发送消息到服务器并接收新消息。

namespaceTcpChatClient
{
classChatClient : TcpClient
{
public ChatClient(string address, int port) : base(address, port) {}public voidDisconnectAndStop()
{
_stop
= true;
DisconnectAsync();
while(IsConnected)
Thread.Yield();
}
protected override voidOnConnected()
{
Console.WriteLine($
"Chat TCP client connected a new session with Id {Id}");
}
protected override voidOnDisconnected()
{
Console.WriteLine($
"Chat TCP client disconnected a session with Id {Id}");//等待一段时间... Thread.Sleep(1000);//尝试再次连接 if (!_stop)
ConnectAsync();
}
protected override void OnReceived(byte[] buffer, long offset, longsize)
{
Console.WriteLine(Encoding.UTF8.GetString(buffer, (
int)offset, (int)size));
}
protected override voidOnError(SocketError error)
{
Console.WriteLine($
"Chat TCP client caught an error with code {error}");
}
private bool_stop;
}
classProgram
{
static void Main(string[] args)
{
//TCP 服务器地址 string address = "127.0.0.1";if (args.Length > 0)
address
= args[0];//TCP 服务器端口 int port = 1111;if (args.Length > 1)
port
= int.Parse(args[1]);

Console.WriteLine($
"TCP server address: {address}");
Console.WriteLine($
"TCP server port: {port}");

Console.WriteLine();
//创建一个新的 TCP 聊天客户端 var client = newChatClient(address, port);//连接客户端 Console.Write("Client connecting...");
client.ConnectAsync();
Console.WriteLine(
"Done!");

Console.WriteLine(
"Press Enter to stop the client or '!' to reconnect the client...");//执行文本输入 for(;;)
{
string line =Console.ReadLine();if (string.IsNullOrEmpty(line))break;//断开客户端连接 if (line == "!")
{
Console.Write(
"Client disconnecting...");
client.DisconnectAsync();
Console.WriteLine(
"Done!");continue;
}
//将输入的文本发送到聊天服务器 client.SendAsync(line);
}
//断开客户端连接 Console.Write("Client disconnecting...");
client.DisconnectAndStop();
Console.WriteLine(
"Done!");
}
}
}

以上只展示的部分示例,更多示例大家可以访问项目地址获取。

项目地址

GitHub:
https://github.com/chronoxor/NetCoreServer

在线文档:
https://chronoxor.github.io/NetCoreServer

总结

本文只展示部分功能和内容,如果您对项目感兴趣可以访问系统地址获取详细信息和体验。

希望本文能在.NET 网络通信方面为各位提供有益的帮助。期待大家在评论区留言交流,分享您的宝贵经验和建议。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号
[DotNet技术匠]
社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!

标签: none

添加新评论