Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用一台服务器处理数百/千个连接?_C#_.net_Sockets_Server - Fatal编程技术网

C# 如何使用一台服务器处理数百/千个连接?

C# 如何使用一台服务器处理数百/千个连接?,c#,.net,sockets,server,C#,.net,Sockets,Server,我正在用C语言编写服务器,但遇到了一个问题 数据流本身不会那么大,但是连接的数量是,问题是这些连接中的任何一个都可以在任何时候发送数据,显然我不想让几千个不同的线程监听每个套接字上的数据 那我怎么处理呢 简而言之,如何在不添加更多线程的情况下侦听来自多个套接字的数据?您需要使用异步编程 这意味着将套接字设置为listen和doing socket.beginacept等。这将把传入的tcp工作从io线程池发布到线程上 较新的c#5 async await东西提高了抽象级别,但本质上还是一样的。但

我正在用C语言编写服务器,但遇到了一个问题

数据流本身不会那么大,但是连接的数量是,问题是这些连接中的任何一个都可以在任何时候发送数据,显然我不想让几千个不同的线程监听每个套接字上的数据

那我怎么处理呢


简而言之,如何在不添加更多线程的情况下侦听来自多个套接字的数据?

您需要使用异步编程

这意味着将套接字设置为listen和doing socket.beginacept等。这将把传入的tcp工作从io线程池发布到线程上


较新的c#5 async await东西提高了抽象级别,但本质上还是一样的。但它确实使异步模式下的“直接”代码编写变得更容易,而beginxxx模型则要求您将服务器代码库转换为事件驱动的代码库。

更详细一点可能会有所帮助。尤其是在考虑替代方案时。你是说数十万个客户端将同时连接到此服务器吗?我们谈论的是与数据库服务器的连接还是仅仅是一个web服务器的连接?如果是前者,客户端是否只能在需要发送/接收数据时连接?如果是后者,这不是自动发生的吗?这个问题太广泛了,甚至有点离题,没有一个明确的问题有一个直接唯一的答案。“你是说数十万客户端将同时连接到这个服务器吗?”是的。什么不使用IIS(简单的rest服务)你要爬的那座山已经被征服了。