我正在创建我的第一个应用程序它的一个小服务器。我只是想知道什么是接受多个连接但不被淹没的最佳方式,比如10个连接中的10个连接然后如果被淹没关闭听众。线程或线程池是否可以帮助我做到这一点。
我添加了Threadpool但不确定我应该如何将它用于我的应用程序。
请查看下面的代码,了解我需要做些什么才能确保安全并且不会被淹没。
由于
class Listener
{
public static TcpListener _listener;
private static TcpClient _client;
private static NetworkStream _clientStream;
public Listener(string ip, Int32 port)
{
ThreadPool.SetMaxThreads(50, 100);
ThreadPool.SetMinThreads(50, 50);
// Set the TcpListener IP & Port.
IPAddress localAddr = IPAddress.Parse(ip);
_listener = new TcpListener(localAddr, port);
}
public void Start() // Run this on a separate thread, as
{ // we did before.
_listener.Start();
Console.WriteLine("Starting server...\n");
Console.WriteLine("Listening on {0}:{1}...", Globals._localIP, Globals._port);
while (Globals._Listen)
{
try
{
if (!_listener.Pending())
{
Thread.Sleep(500); // choose a number (in milliseconds) that makes sense
continue; // skip to next iteration of loop
}
Globals._requestCounter += +1;
// Get client's request and process it for web request.
ProcessRequest();
}
catch (SocketException e)
{
// Listener Error.
}
catch (InvalidOperationException er)
{
}
}
_listener.Stop();
}
public static void Stop()
{
Globals._Listen = false;
}
}
static void Main(string[] args)
{
// Set listener settings.
var server = new Listener(Globals._localIP, Globals._port);
// Start the listener on a parallel thread:
Thread listenerThread = new Thread(server.Start);
listenerThread.Start();
Thread.Sleep(500);
}
答案 0 :(得分:1)
对于.NET中的TCP,我强烈建议使用WCF,而不是尝试自己动手。根据您的需要,有一个“TCP端口共享服务”,您只需启用它即可。此外,像限制,消息大小限制等内容都已经完成,您只需配置它即可。还有多种方式可以使用WCF net.tcp,它可以进行流式传输,点对点,全双工等,所以很少有你需要自己动手的方案。