使用.net3.5的缓存池和SocketAsyncEventArgs类创建socket服务器

在.NET 3.5里System.Net.Sockets空间下有一组增强功能的类,提供可供专用的高性能套接字应用程 序使用的可选异步模式,SocketAsyncEventArgs 类就是这一组增强功能的一部分。该类专为需要高性能 的网络服务器应用程序而设计。应用程序可以完全使用增强的异步模式,也可以仅仅在目标热点区域(例 如,在接收大量数据时)使用此模式。以下是关于此类的介绍(摘自MSDN)

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx

其实主要是改进了异步模式,让一些类可以重用,可能用的对象池的原理,不像以前的异步传输模式 ,每个数据来了,new一个新的iasyncresult,这样可能会引起GC线程CPU很高。下面是我找的一篇介 绍.net 3.5里增强的socket api使用的文章,我翻译了一下,大家了解一下,貌似性能增强了不少。当然 大家肯定说还不如看原文呢,但怎么说也是俺花了好几天,问了好多人才翻译出来的,大家没事赏个脸看 看也没啥坏处,对吧。原文链接如下(未经作者同意翻译的,我不知道怎么联系作者,也不会用英语和作 者交流,如果作者会中文,我就会问问他是否让我翻译)

http://www.flawlesscode.com/post/2008/01/Socket-Server-with-Net35-using- SocketAsyncEventArgs.aspx

In a previous post I talked about the System.Net.Sockets enhancements in .NET 3.5, and if you haven't read it I suggest you do before tucking in to this as some of that code is important to understand what's happening here.

在前面的帖子里,我谈到了System.Net.Sockets在.NET 3.5里的增强,如果你还没有读过,我建议你 深入本帖之前先读一下,因为那些代码对理解本帖很重要。

Before I start, in essence this is just a result of my experimentation and while it seems it does a pretty good job,

在开始之前(我有必要提一下),虽然它看起来不错,但这本质上只是我实验的一个结果,。

I'm not going to claim it's bullerproof or that it's a good example of how to write a socket server all it does is demonstrate the techniques of working with the new classes and methods.

我不想声称这是bullerproof的,或者是一个很好的关于如何编写socket服务器的例子,所有这些用于 演示使用新的类和方法工作的技术。

The sample solution you can see on the right there contains three projects.

你可以在右边看到示例解决方案里有三个项目。

FlawlessCode contains all the classes we'll need to build ourselves a socket server.

FlawlessCode项目包含了创建Socket服务器所需的所有的类。

TestLoadGenerator is a console application which generates load for us by connecting lots of sockets to our server and sending it random data.

TestLoadGenerator项目用于向我们的Socket服务器产生大量的socket连接负载,并向服务器发送随机 数据。

TestSocketServer is a small socket server implementation using the classes in FlawlessCode.

TestSocketServer项目是一个使用FlawlessCode项目实现的一个简单的Socket服务端。

TcpSocketListener

We'll begin by looking at the FlawlessCode project and in particular, the TcpSocketListener.

我们将从FlawlessCode项目开始,特别是TcpSocketListener类。

It should be fairly obvious from the name what this class is meant to achieve, it sits in a loop listening for socket connections and lets us know when one arrives.

从名称上很容易看出这个类的功能,它在一个循环里监听socket连接,并在连接到达时通知我们。

The public interface is very simple and looks like this:

时间: 2024-08-04 12:08:14

使用.net3.5的缓存池和SocketAsyncEventArgs类创建socket服务器的相关文章

Android中的Bitmap缓存池使用详解_Android

本文介绍了如何使用缓存来提高UI的载入输入和滑动的流畅性.使用内存缓存.使用磁盘缓存.处理配置改变事件等方法将会有效的解决这个问题. 在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片). 在这些控件中,当一个子控件不显示的时候,系统会重用该控件来循环显示 以便减少对内存的消耗.同时垃圾回收机

Android中的Bitmap缓存池使用详解

本文介绍了如何使用缓存来提高UI的载入输入和滑动的流畅性.使用内存缓存.使用磁盘缓存.处理配置改变事件等方法将会有效的解决这个问题. 在您的UI中显示单个图片是非常简单的,如果您需要一次显示很多图片就有点复杂了.在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片). 在这些控件中,当一个子控件不显示的时候,系统会重用该控件来循环显示 以便减少对内存的消耗.同时垃圾回收机

HTTP缓存头Last-Modified和ETag介绍_win服务器

第一次请求 请求: 复制代码 代码如下: GET /pic/201408/102.jpg HTTP/1.1 Host: www.jb51.net Connection: keep-alive Cache-Control: no-cache Accept: image/webp,*/*;q=0.8 Pragma: no-cache User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chro

线程池 java socket服务器基础

可以用类似 while(true)input.readByte()来想得到客户端发送过来的数据. 用output的writeByte来像客户端发送数据. 服务器的socket是通过serverSocket.accept()方法来产生的. 用这个类实现线程池. 看例子,如下代码实现的功能很简单,就是客户端发送一个字节,服务器读到客户端发送的数据后打印它.    代码如下 复制代码 import java.io.DataInputStream; import java.io.DataOutputSt

代替缓存使用的ini类

这个类的思想原创自DLL,我现在自己已经写到第三个版本了 <% ''================================================================ ''= Power By Tim = ''=--------------------------------------------------------------= ''= 文件摘要:INI类 = ''=----------------------------------------------

RDMA高速低延时网络:流动缓存背后的功臣

戴尔Fuild Cache for SAN,在服务器闪存缓存与SAN阵列的集成方面可谓独树一帜.相信一些读者对该技术已经不陌生,除了那500万IOPS的Demo之外,网上也能找到相关资料和分析的文章,如:<性能与ILM的平衡:服务器闪存缓存的思考>.今天我们想回顾一下Fuild Cache for SAN的独特技术优势,以及在流动缓存背后的功臣--RDMA高速低延时网络. 如果说PCIe/ NVMe打通了主机内部CPU与闪存之间通道的话,那么RDMA over InfiniBand或者RoCE

深入理解并行编程-分割和同步设计(五)

原文链接    作者:paul    译者:谢宝友,鲁阳,陈渝 并行快速路径 细粒度的设计一般要比粗粒度的设计复杂.在许多情况,绝大部分开销只由一小部分代码产生[Knu73].所以为什么不把精力放在这一小块代码上. 这就是并行快速路径设计模式背后的想法,尽可能地并行化常见情况下的代码路径,同时不产生并行化整个算法所带来的复杂性.您必须理解这一点,不只算法需要并行化,算法所属的工作负载也要并行化.构建这种并行快速路径,需要极大的创造性和设计上的努力. 图1.1并行快速路径的设计模式 并行快速路径结

初步研究node中的网络通信模块

目前,我们处于互联网时代,互联网产品百花齐放.例如,当打开浏览器,可以看到各种信息,浏览器是如何跟服务器进行通信的?当打开微信跟朋友聊天时,你是如何跟朋友进行消息传递的?这些都得靠网络进程之间的通信,都得依赖于socket.那什么是socket?node中有哪些跟网络通信有关的模块?这些问题是本文研究的重点. 1. Socket Socket源于Unix,而Unix的基本哲学是『一些皆文件』,都可以用『打开open ==> 读/写(read/write) ==> 关闭(close)』模式来操作

Facebook对memcached的提升

如果你翻阅过一些关于大型网站扩展(Scaling)的资料,那么你可能听说过一个叫memcached的东西.memcached是一个高性能.分布式的内存对象缓存系统.我们Facebook可能是世界上最大的memcached用户了.我们利用memcached来减轻数据库的负担.memcached确实很快,但是我们还要让他更快.更高效.我们使用了超过800台服务器,提供超过28TB的内存来服务于用户.在过去的一年里,随着Facebook的用户量直线上升,我们遇到了一系列的扩展问题.日益增长的需求使得我