`
txf2004
  • 浏览: 6887870 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

开发高性能的Socket服务器

 
阅读更多

要编写高性能的Socket服务器,为每个接收的Socket分配独立的处理线程的做法是不可取的,当连接数量很庞大时,服务器根本无法应付。要响应庞大的连接数量,需要使用IOCP(完成端口)来撤换并处理响应。

.net framework的System.Net.Sockets.Socket 类有一组xxxAsync方法是封装了IOCP的处理,用于编写高性能Socket应用程序,xxxAsync该组方法需要结合SocketAsyncEventArgs类来使用,下面是MSDN参考资料,里面有一个详细的例子:

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

Socket类xxxAsync的方法,使用起来比较复杂,需要时间消化上述的例子,结合实际编写所需的操作。

以下是使用SocketAsyncEventArgs时应该注意的地方:

1.连接和接收时不要使用一个SocketAsyncEventArgs对象,如下面代码,accept和receive是不同的对象,不用使用同一个SocketAsyncEventArgs调用AcceptAsync和ReceiveAsync方法。

SocketAsyncEventArgs accept = _RequestPool.PopOrNew();

bool raise = _Listener.AcceptAsync(accept);

SocketAsyncEventArgs receive = _RequestPool.PopOrNew();

receive.SetBuffer(http.ReceiveBuffer, 0, http.ReceiveBuffer.Length);

bool raise = http.Socket.ReceiveAsync(receive);

2.应该使用可伸缩的SocketAsyncEventArgsPool连接池缓存,如下面的PopOrNew方法,其他数据缓存类似。

class SocketAsyncEventArgsPool

{

Stack<SocketAsyncEventArgs> _Pool;

public SocketAsyncEventArgsPool()

{

_Pool = new Stack<SocketAsyncEventArgs>();

}

public void Push(SocketAsyncEventArgs item)

{

if (item == null) return;

lock (_Pool)

{

_Pool.Push(item);

}

}

public SocketAsyncEventArgs PopOrNew()

{

if (Count == 0)

return new SocketAsyncEventArgs();

return Pop();

}

public SocketAsyncEventArgs Pop()

{

lock (_Pool)

{

return _Pool.Pop();

}

}

public int Count

{

get { return _Pool.Count; }

}

public void Clear()

{

while (Count > 0)

{

Pop().Dispose();

}

}

}

3.当接收到长度为0的数据时,表明客户端关闭Socket,这时应该开始执行服务端的Socket关闭操作。

private void OnReceive(SocketAsyncEventArgs receive)

{

try

{

if (receive.SocketError == SocketError.Success && receive.BytesTransferred > 0)

{

//处理接收

}

else

{

Close(receive); //关闭Socket

}

}

catch (Exception ex)

{

TraceError(ex);

}

}

分享到:
评论

相关推荐

    C#高性能服务器;端口-心跳高性能Socket服务器

    C#开发的高性能服务器+-+端口-心跳高性能Socket服务器; 完善的服务器并发处理机制,比较稳定。

    一个PHP开发的的高性能Socket服务器框架.rar

    orkerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。支持TCP长...

    PHP实例开发源码-Workerman 高性能的PHP socket 服务器框架.zip

    PHP实例开发源码—Workerman 高性能的PHP socket 服务器框架.zip PHP实例开发源码—Workerman 高性能的PHP socket 服务器框架.zip PHP实例开发源码—Workerman 高性能的PHP socket 服务器框架.zip

    TCPIP服务器连接组件,快速开发高性能TCP服务器(C/S),socket异步连接并发高

    简单几部就可以开发出高性能的C/S模式tcp服务器 演示源码里有数据报文重载势力,可以根据实际需求进行 不同数据格式的开发。 已经基于这个开发多个物联网相关实际应用 启动部分代码 //新建服务TcpSvr svr = new ...

    workerman PHP socket 服务器框架

    workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。...

    Linux高性能服务器编程.pdf

    《Linux高性能服务器编程》是Linux服务器编程领域的经典著作,由资深Linux软件开发工程师撰写,从网络协议、服务器编程核心要素、原理机制、工具框架等多角度全面阐释了编写高性能Linux服务器应用的方法、技巧和思想...

    workerman-chat-for-winPHP socket 服务器框架

    workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。...

    socket编程和高性能http服务器开发专栏中的图.zip

    ocket编程和高性能http服务器开发专栏中所有的配图均打包记录在这里;用于以后修改或使用这些图片;此为个人资源,请他人不要下载。

    网易游戏高性能、分布式服务器开发框架 Pomelo.zip

    pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以...

    Linux高性能服务器编程

    内容简介《Linux高性能服务器编程》是Linux服务器编程领域的经典著作,由资深Linux软件开发工程师撰写,从网络协议、服务器编程核心要素、原理机制、工具框架等多角度全面阐释了编写高性能Linux服务器应用的方法、...

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码)

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码) 技术框架: 1. 线程池 + 非阻塞 socket + epoll + 事件处理的并发模型 2. 状态机解析HTTP请求 3. 心跳机制 4. 简易日志系统 主要内容: 1. ...

    开源Cowboy.Sockets建立高性能网络服务器

    原生的Sockets我们已经写了很多,大家都知道定义一套完整的Socket通讯服务器和客户端以及网络通讯的协议是一件很麻烦的事情,而Cowboy.Sockets原理上也是使用Socket通讯为基础,帮助我们已经搭建好了通讯的服务器和...

    DELPHI高性能大容量SOCKET并发开发.pdf

    delphi下iocp高性能服务器实现

    Linux高性能服务器编程清晰PDF+源码.7z

    《Linux高性能服务器编程》是Linux服务器编程领域的经典著作,由资深Linux软件开发工程师撰写,从网络协议、服务器编程核心要素、原理机制、工具框架等多角度全面阐释了编写高性能Linux服务器应用的方法、技巧和思想...

    基于Workerman 改写的简化版 用于开发基于 Socket 的 HTTP Server.rar

    Workerman 的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解 PHP socket 以及PHP 多进程细节。 Workerman 本身是一个PHP多进程服务器框架,具有 PHP 进程管理以及 socket 通信的模块,...

    HP-Socket 网络通信框架开发指南

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、 客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通 信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...

    多租户物联网平台服务器框架是根据多年经验以及实际客户需求而研发 主要技术基于高性能、高并发的IOCP Sokect基础上研发而

    主要技术基于高性能、高并发的IOCP Sokect基础上研发而成。 目前使用的C#语言开发,运行于Windows平台,后期会推出跨平台支持版本,Java版本等等。 集成于Web API、Web服务器、MQTT服务器、Socket TCP服务器、OPC...

    SuperSocket服务器应用程序框架-.net

    你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等。...

    高性能网络应用框架 Netty.zip

    Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一...

    SuperSocket开发框架

    强大,灵活而且可扩展的配置让你开发Socket服务器省时省力 支持多个socket服务器实例运行, 而且支持多个服务器实例的隔离 SuperSocket能以控制台或者Windows服务形式运行。一个脚本就能将SuperSocket安装成服务 灵活...

Global site tag (gtag.js) - Google Analytics