gpt4 book ai didi

c# - DotnetCore 1.0.x 中的 TcpListener.BeginAcceptTcpClient I/O 模型是什么

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:32 24 4
gpt4 key购买 nike

我已经知道 BeginXXX(AMP) 或 XXXAsync(TAP) 在 .NetFramework 中使用 IOCP,那么现在我想在 dotnetcore 上构建 httpServer。所以我需要知道内部机制。

我在 .NetworkFramework 中的旧版本如下代码:

private void continueAccept(TcpListener tcpListener,Action<TcpClient> processConnection)
{

//IOCP
tcpListener.BeginAcceptTcpClient(ar =>
{

if (listening)
continueAccept(tcpListener, processConnection);
else
return;

try
{

TcpClient tcpClient = tcpListener.EndAcceptTcpClient(ar);

acceptCount++;

tcpClient.SendTimeout = 300000;
tcpClient.ReceiveTimeout = 300000;

ConsoleHost1.trace(System.Diagnostics.TraceEventType.Verbose, $"Client Accept { tcpClient.Client.RemoteEndPoint.ToString()}");

ThreadPool.QueueUserWorkItem((o) => {

processConnection((TcpClient)o);

}, tcpClient);

}
catch (Exception e)
{
ConsoleHost1.trace(System.Diagnostics.TraceEventType.Error, $"acceptTD:{e.Message}");
}

}, null);

}

public void startListen(Action<TcpClient> processConnection)
{

tcpListener = new TcpListener(IPAddress.Parse("0.0.0.0"), port1);
tcpListener.Start(maxQueue1);
listening = true;

continueAccept(tcpListener, processConnection);

}

最佳答案

我刚刚解决了。

在 Windows 中:

AcceptAsync 使用 AcceptEx+SocketAsyncEventArgs(IOCP)
BeginAccept 使用 AcceptEx+SafeNativeOverlapped(IOCP)

引用资料来自: https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Net.Sockets/src/System/Net/Sockets/Socket.Windows.cs https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Windows.cs

在类 Unix 操作系统中:

AcceptAsync 或 AcceptAsync 在用户模式下使用 Interop.Sys.Accept + ThreadPool。

引用资料来自:https://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Net.Sockets/src/System/Net/Sockets/SocketPal.Unix.cshttps://github.com/dotnet/corefx/blob/release/1.0.0/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs

关于c# - DotnetCore 1.0.x 中的 TcpListener.BeginAcceptTcpClient I/O 模型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com