这个内容在cnblogs中也讨论过很多次了,这两天大概看了一些资料,看到一些简单的性能指标拿出来和大家讨论一下。
Socket + Threads/ThreadPool
大概性能:小于1500个连接
实现:Accept一个Socket,就交给一个线程去管理,比较笨,但也比较有效,因为是同步方式,控制起来很方便。高级点的,就是交给一个线程池去管理,线程池由系统自动托管,省去了开销线程的时间。一般小型项目,用这个完全足够,开发也简单。但要注意,如果若干Socket长时间占用线程池中的线程,同时其它连接数又比较多,很容易出现提示说你没有足够的线程供使用。呵呵,让Socket少做点事,少占用时间,换一个快点的CPU是不错的方式。另外,如果有一些比较好的第三方线程池组件,也可以选择使用,比如SmartThreadPool。
Socket + Select
大概性能:大于1500个连接后性能下降
实现:Select是很常用的一种模型。是在阻塞功能中轮询一个或多个Socket,将要处理的Socket放到一个IList中,当Select 轮询结束后,然后我们再自己处理这个IList中的Socket。具体的用法可以看一下MSDN。Select的效率并不能说是高的,因为当队列中待处理的Socket比较多的时候,处理最后几个Socket相当于要遍历所有前面的Socket,非常不划算的。
Socket + Asynchronous
大概性能:约7500个客户端连接
实现:BeginXXXX,EndXXXX,再熟悉不过了吧。异步Socket归根到底,还是用的线程池技术,用线程池来处理异步IO。这就又引出个问题,.NET的线程池又是用的什么实现方式,以前看过有人说,.NET的线程池是用的完成端口来实现的,我不知道这样的说法是不是正确,从查到的资料中也没有办法确认(希望这点有朋友可以告诉我)。异步Socket对于程序的处理流程来说比同步复杂了许多,异步回调函数的控制不如同步方式那样直观。但有一点我想应该是要注意的,就是回调函数应该轻装上阵,不应该处理过多的事务,对传递数据的处理,应该交给其它线程进行处理。
IOCP(完成端口)
大概性能:约20000~50000个客户端连接
实现:现在.NET下有一些伪IOCP,大家可以去搜索一下,还没有见过开放出来的用这些伪IOCP来实现的SOCKET例子。我说的20000~50000个客户端连接,是指在C++下开发的情况,这样的情况下,需要用到的基本技术还包括内存池、查询算法等。
伪IOCP能实现多少最大连接,没有资料可以查,如果有朋友知道,可以讨论一下。另外上面提到的许多数据,是从一些资料上摘抄下来的,我没有自己试过,仅仅是拿出来和大家讨论一下。我想,一个高性能的服务端程序,可能需要的技术不仅仅是采用什么模型,还有许多细节需要注意,比如内存的处理,采用什么算法等等,当然,这仅仅是软件成本上的,硬件上肯定也是需要投入的。
分享到:
相关推荐
HPSocket.Net是针对.NET平台开发的高性能、多线程、异步通讯组件,为开发者提供了强大的网络通信支持。 【描述】"C# 版socket 收发TCP协议有模版样例"表明这个资源包含了一个具体的实例,展示了如何在C#中使用...
本文将深入探讨.NET下的高性能Socket编程,以及如何利用IOCP来提高网络应用的效率。 首先,Socket是网络编程中的基础组件,它提供了进程间通信的能力,使得数据能在不同网络连接之间传输。在.NET中,Socket类是进行...
在C# .NET环境中,Socket是用于网络通信的基础组件,它提供了对TCP/IP协议栈的低级别访问。本文将深入探讨如何在C# .NET中使用Socket构建一个简单实用的框架,以提升项目的可扩展性、健壮性和容错率。 首先,我们...
在VB.NET编程环境中,Socket通信是一种基础且强大的网络通信方式,尤其在TCP/IP协议栈上。本示例将深入探讨如何使用VB.NET实现基于TCP/IP的Socket通信,这对于开发网络应用,如聊天室、文件传输等是至关重要的。 ...
C#.net同步异步SOCKET通讯和多线程总结是指在C#.net环境下实现的同步异步套接字通信和多线程编程的总结。套接字(Socket)是tcp/ip网络协议接口,内部定义了许多的函数和例程,可以看成是网络通信的一个端点。在网络...
同时,为了优化性能,可以考虑使用异步编程模型,如.NET中的async/await关键字,以及Android的AsyncTask或Handler机制。 这个示例中的“AndroidNetCommunication”可能包含了实现上述功能的Android和.NET代码示例,...
(3)[C#].net平台下完全异步Socket编程的例子;(4)C#.net同步异步SOCKET通讯和多线程总结;(5)Socket使用简介;(6)同步套接字通信;(7)续实例解析SOCKET编程模型之异步通;(8)在C#中使用异步Socket编程实现TCP网络服务的CS...
在VB.NET编程环境中,Socket是用于网络通信的重要组件,它允许程序通过TCP/IP协议进行数据传输。本示例源代码提供了客户端(socket_client)和服务器端(socket_server)的实现,帮助开发者理解如何在VB.NET中使用...
VB.NET Socket编程是一种在VB.NET环境下使用网络套接字(Socket)进行通信的技术。Socket是网络编程的基础,它允许应用程序通过Internet或局域网发送和接收数据。在VB.NET中,我们可以利用System.Net.Sockets命名...
vb.net_socketvb.net_socketvb.net_socketvb.net_socketvb.net_socketvb.net_socketvb.net_socketvb.net_socketvb.net_socket
一些人也许知道,socket这个概念最早是UNIX里面的。 用于实现TCP/IP协议族里面的通讯。 后来被各家公司抄了过去,比如微软 Sun之类的。 目前很多语言里面 ,都是使用socket实现TCP/IP通讯的。或者说大都有socket...
《C#.NET 4.0实现的多线程Socket聊天室服务器与客户端详解》 在IT领域,网络通信是至关重要的部分,而Socket编程作为网络通信的基础,是开发者必须掌握的关键技能之一。本文将深入探讨如何使用C#.NET 4.0框架,结合...
Socket编程在.NET Framework中是通过System.Net.Sockets命名空间提供的,这个命名空间包含了对Windows Sockets (Winsock)接口的托管实现,使得C#.Net开发者能够更方便地进行网络通信。Socket编程主要涉及到TCP/IP...
总结来说,VB.NET中的Socket类为我们提供了强大的网络通信能力,特别是结合UDP协议,可以在保证高效性能的同时,实现各种实时通信应用。通过深入学习和实践,开发者可以利用VB.NET的Socket类构建出稳定、高效的网络...
VB.NET是一种基于.NET框架的编程语言,用于构建各种应用程序,包括网络通信程序。Socket编程是网络编程中的基础,它允许程序通过网络发送和接收数据。本项目是一个简单的VB.NET Socket程序,展示了如何在VB.NET中...
VB.NET Socket编程是网络通信领域中的一个重要话题,它允许开发者创建能够进行数据交换的应用程序。在VB.NET中,Socket类提供了TCP/IP协议栈的基本功能,使得开发者可以构建服务器端(Server)和客户端(Client)...
C#.Net网络程序开发-Socket篇 教程 加 源码 c#网络编程经典入门,示例,原理的精辟讲解,学习的好材料 <br> Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其...
### 基于VB.NET的异步Socket网络TCP通信知识点详解 #### 一、概述 在计算机网络领域中,Socket编程是一种广泛使用的编程接口,它允许应用程序通过网络进行通信。Socket编程可以支持多种协议,其中最常用的是TCP/IP...
VB.NET(Visual Basic .NET)是微软开发的一种面向对象的编程语言,它支持使用Socket进行网络通信。本篇文章将深入探讨VB.NET(2008)中Socket通信的相关知识点,并基于提供的资源“vb.netsocket”进行讲解。 首先...
但需要注意,ASP.NET 默认使用异步模型,因此在实际开发中,我们可能需要结合 `BeginAccept()`、`BeginReceive()` 和 `BeginSend()` 等异步方法来提高性能,避免阻塞服务器线程。 在进行 Socket 编程时,还需要注意...