gpt4 book ai didi

c# - 有什么办法可以改善 TCP 连接时间吗?

转载 作者:可可西里 更新时间:2023-11-01 02:33:25 27 4
gpt4 key购买 nike

我编写了一个 TCP 服务器来使用 BeginAccept/EndAccept 模式。有了这个,我使用 TcpClient 编写了一个简单的 UnitTest,并测量了每个部分。所有测试都是本地主机,所以我很惊讶地看到 TCP 连接一直需要 1 秒。我已经设置了 Socket.NoDelay = true 虽然我相信这只会影响发送/接收。我没有收到第一个数据包。感谢任何有关加快速度的帮助或想法。

注意:我无法更改客户端以保持连接打开,如果可能的话,我需要能够每秒处理大量请求。

服务器端:

public void Start()
{
System.Net.IPHostEntry localhost = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
System.Net.IPEndPoint endpoint;
int port = Properties.Settings.Default.ListenPort;

//
// Setup the connection to listen on the first IP, and specified port
//
endpoint = new IPEndPoint(IPAddress.Any, port);
listenSocket = new Socket(endpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Bind(endpoint);
listenSocket.NoDelay = true; // do not wait 200 milliseconds for new data to be buffered on the connection
listenSocket.Listen(int.MaxValue);
Console.WriteLine("Listening on {0}:{1}", localhost.AddressList[0], port);

//
// Post the accept. The accept method will continuously post a new accept as soon as a connection is made
//
while (true)
{
accepted.Reset();
Connection connection = connections.Pop();
listenSocket.BeginAccept(AcceptCallback, connection);
accepted.WaitOne();
}
}

private static void AcceptCallback(IAsyncResult ar)
{
accepted.Set();

Connection connection = ar.AsyncState as Connection;
Socket remoteSocket = null;

try
{
remoteSocket = listenSocket.EndAccept(ar);
remoteSocket.NoDelay = true;
connection.RemoteSocket = remoteSocket;

//
// Start the Receive cycle
//
Receive(connection);
}
catch (SocketException)
{
Disconnect(connection);
}
}

简单的测试客户端:

[TestMethod()]
public void ClientTest()
{
TestContext.BeginTimer("Connection");
TcpClient client = new TcpClient("localhost", 10300);
NetworkStream stream = client.GetStream();
TestContext.EndTimer("Connection");
...

我使用 LoadTest 加载了 25 个用户,事务“连接”总是花费 1 秒以上。

最佳答案

不知道为什么,只是简单地改变一下:

TestContext.BeginTimer("Connection");          
TcpClient client = new TcpClient("localhost", 10300);
TestContext.EndTimer("Connection");

对此:

TestContext.BeginTimer("Connection");
TcpClient client = new TcpClient();
client.Connect("localhost", 10300);
TestContext.EndTimer("Connection");

将时间从 1 秒减少到 0.13 秒。将不得不调查原因,但希望这对将来的人有所帮助。

关于c# - 有什么办法可以改善 TCP 连接时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346091/

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