网络库是NewLife系列最成功的作品,自2005年以来已经历过三代重构,最高取得2000万tps吞吐以及单机400万长连接的优秀成绩!

基于网络库的代表作包括:RPC框架ApiServer、HttpServer服务器、反向代理XProxy等。

Nuget包:NewLife.Core

源码地址:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Net/ISocketClient.cs



快速入门

打开vs2022,新建.NET6.0控制台项目,从nuget引入NewLife.Core,写入以下代码:

using NewLife;
using NewLife.Log;
using NewLife.Net;

XTrace.UseConsole();

var uri = new NetUri("tcp://127.0.0.1:6000");
var client = uri.CreateRemote();
client.Timeout = 15_000;
client.Log = XTrace.Log;

client.Received += (s, e) => XTrace.WriteLine(e.Packet.ToStr());
client.Send("我是大石头!");

Console.ReadLine();

打开码神工具,下载地址 http://x.newlifex.com/XCoder_Install.exe 。使用网络调试工具,监听6000端口。

编译前面控制台项目,F5跑起来。可以在码神工具中看到控制台发送过来的数据。

码神工具下方发送窗口输入“谁是孙悟空?”,点击“发送”,控制台中收到了数据,并显示出来。

例程讲解

网络库有两个客户端,分别是TcpSession和UdpServe,代表Tcp和Udp的客户端封装,它们都实现了ISocketClient接口。

网络库统一使用NetUri表示地址定位,主要表达协议、主机和端口三者。如果不想用字符串,也可以用其它构造函数,直接指定三个内容。

NetUri的扩展方法CreateRemote直接根据协议创建客户端,上面例程是Tcp协议。更换为Udp也是可以的,因为码神工具那边是混合监听Tcp和Udp,功能一样。

var uri = new NetUri("udp://127.0.0.1:6000");
var client = uri.CreateRemote();
client.Timeout = 15_000;
client.Log = XTrace.Log;
client.LogSend = true;
client.LogReceive = true;

Timeout设置超时时间,Log设置日志。

此外,还可以启用LogSend和LogReceive,把收发数据以十六进制形式打印出来。该方法方便开发调试,生产环境务必关闭。


客户端的接收默认是异步,事件驱动。

client.Received += (s, e) => XTrace.WriteLine(e.Packet.ToStr());

其中e.Packet即是收到的数据包,Packet类型,该类很像Span,设计于10年前,预计一两年后将会改用Span。具体使用细节可参考Span,这里不再重复。

数据发送很简单。

client.Send("我是大石头!");

直接发送Packet和Byte[]也是可以的。

此外,ISocketClient还支持Add<THandler>扩展注入链式处理器,用于自定义协议。细节可参考:

此处为内容卡片,点击链接查看:https://newlifex.com/go/doc/10611981