Socket多路复用库 https://sourceforge.net/projects/speed/

daemon_huang 2010-01-05 07:48:00
https://sourceforge.net/projects/speed/
...全文
381 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-05-17
  • 打赏
  • 举报
回复
结贴通知:
请lz注意结贴。。。。
daemon_huang 2010-03-05
  • 打赏
  • 举报
回复
VS2005的工程是有的, 源码可以直接下载哦.
wangqiangcc 2010-03-03
  • 打赏
  • 举报
回复
强大,很不错,请教一下,楼主,高性能体现在那个方面。
Eleven 2010-03-03
  • 打赏
  • 举报
回复
Up一下。。。。。。。。。。。
zhou1xp 2010-03-03
  • 打赏
  • 举报
回复
呵呵,先MARK一下,希望有源码出现
UDX协议 2010-03-03
  • 打赏
  • 举报
回复
最好增加,vc6,vs2003,2005的工程
WizardK 2010-03-01
  • 打赏
  • 举报
回复
UP
CyberLogix 2010-03-01
  • 打赏
  • 举报
回复
不错,支持一下 ,
很好的一个封装
daemon_huang 2010-02-10
  • 打赏
  • 举报
回复
copy一下 demos/README

Demos describtion
-----------------
Windows Reactor and FreeBSD Reactor only support Level Triggered; Linux
Reactor can support Level Triggered and Edge Triggered.

1. simple_udp
UDP server and client, which use blocking socket io.

2. simple_tcp
TCP serve and client, which directly use blocking socket io.

3. nonb_tcp_client
Implement multiple nonblocking tcp clients using nonblocking Connector and Level
Triggeredd Reactor.

4. common_tcp_server
A common tcp server which uses Level Triggered Reactor and blocking io.
Because using blocking io, sending may be blocked. Advise that sending
data runs a child thread.

5. let_tcp_server(let:Linux Edge Triggered)
Note this demo only support Linux!
Use Edge Triggered Reactor on Linux and nonblocking io.

6. fb_tcp_server(fb:FreeBSD)
Note this demo only support FreeBSD, because using the feature of FreeBSD::kqueue!
Use Level Triggered Reactor on FreeBSD and blocking io. This demo will describe usage
about the param availBytes in EventHandler(int availBytes). In addition, this demo will
use EventHandler::WRITE_MASK to send data automatically.

Summary of 4,5,6'Servers
-------------------------
OS W: Windows L: Linux F: FreeBSD A:All
Triggered L: Level-Triggered E: Edge-Triggered
IO B: Blocking N: Nonblocking

Server OS Triggered IO
-------------------------------------
4 A L B
5 L E N
6 F L B
-------------------------------------
daemon_huang 2010-02-10
  • 打赏
  • 举报
回复
年前更新, 发布1.2版本。
主要更新内容
1. 增加Connector nonblocking非阻塞IO支持;
2. Windows reactor加入exceptfds处理;
3. Linux reactor加入Level Triggered;
4. 统一Windows/Linux/FreeBSD LT的语义,也就是说,同一套代码在三个平台上行为是一致的;
5. FreeBSD reactor加入kqueue的特性:当kevent返回时,通知应用程序可收字节数和可写的发送缓冲区大小;
6. 整理的例子代码, 详情请看: demos/README。
luck_wei 2010-02-06
  • 打赏
  • 举报
回复
加油,支持。
WizardK 2010-01-28
  • 打赏
  • 举报
回复
严重支持!
daemon_huang 2010-01-28
  • 打赏
  • 举报
回复
1.1版本发布了,加入了FreeBSD kqueue的功能。
目前已支持FreeBSD/FreeBSD64, Linux,Win32平台。
SyDes21 2010-01-27
  • 打赏
  • 举报
回复
兄弟做得很不错啊。继续。
daemon_huang 2010-01-21
  • 打赏
  • 举报
回复
即将加入Reactor的FreeBSD kqueue.
daemon_huang 2010-01-19
  • 打赏
  • 举报
回复
支持同步IO的阻塞和非阻塞机制.
daemon_huang 2010-01-19
  • 打赏
  • 举报
回复
对的, 是基于EventHandler事件接口回调.
但非异步,是同步.
JonathanS666 2010-01-18
  • 打赏
  • 举报
回复
一个基于回调的异步socket类
daemon_huang 2010-01-17
  • 打赏
  • 举报
回复
过一段时间将加入FreeBSD kqueue对应的reactor.
daemon_huang 2010-01-07
  • 打赏
  • 举报
回复
发布了新的包, 加入文档说明.
另外, 大家可通过svn下载代码.
https://speed.svn.sourceforge.net/svnroot/speed/trunk
加载更多回复(5)
1.1 什么是Herm Herm是一套快速开发高性能的网络应用的C++。比如开发网络游戏、即时通信、流媒体、文件下载、P2P等基于TCP/IP网络应用。 Herm包括三个组件: (1)Utilities 最基础的组件,提供线程、一读一写线程不加锁的ring buffer、二进制消息解析器、支持多态的对象管理器等。 (2)Socket 用面向对象和泛型的方法抽象了TCP/UDP的Socket IOs;抽象了Win32 Select、Linux epoll和FreeBSD kqueue的多路复用API。统一了三者水平模式(Level Triggered)的语义(一套代码在Win32/Linux/FreeBSD运行结果是一样的),Linux上也支持了边缘模式(Edge Triggered)。 (3)Framework 基于Utilities和Socket的简化开发网络应用的框架,抽象出Peer和Session对象。Peer和Session对象以及Framework实现的功能将在第2章介绍。 Herm目前仅支持Linux/Windows/FreeBSD 32bits平台。调用者可以基于不同的需求使用不用的组件。 1.2 最简单的例子 本节给出两个分别用Framework和Socket组件实现的简单TCP Server的例子。所有的例子可以参考examples frameworks和multiplexors目录。 1.2.1 用Framework实现TCP Server 首先,实现一个Listener, class Listener : public Herm::Listener { virtual void Accept(Herm::Session* session) { // 在这里得到一个于客户端通信的Session // 注册用于处理收到的消息的handler // 用Session::Push将数据写到发送buffer,最终数据传给client } }; 实现一个App, class App : public Herm::App { virtual bool Init() { // 1. 创建Network Herm::Network* net = CreateNetwork(); // 2. 创建一个TCP Server Peer,将Listener注册到Peer,进行监听 Herm::Peer* peer = net->CreateTCPServer(addr, new Listener); } }; 1.2.2 用Socket实现TCP Server 用Socket实现TCP Server更灵活,但实现者要做一些额外的工作,比如tcp stream解析,缓冲队列处理等等。 首先实现一个AcceptHandler,处理Client连接, class AcceptHandler : public Herm::EventHandler { virtual int Receive(int) { m_acceptor->Accept(streamHandler->GetStream()); g_reactor->Register(streamHandler, Herm::READ_MASK); ... } private: Herm::Acceptor* m_acceptor; }; 实现StreamHandler, 处理数据收发, class StreamHandler : public Herm::EventHandler { // Handle onle int param on FreeBSD, pls see the example of FreeBSD_tcp_server virtual int Receive(int) { m_stream->Recieve(buf, .......); ..... } private: Herm::Stream* m_stream; }; 最后,在一个线程里把上面Handler执行起来, while (true) g_reactor->Run(); 1.3 Herm地址 https://sourceforge.net/projects/speed/ 1.4 下一章话题 下章将较详细地介绍Framework组件,主要介绍如何用Framework实现真实可用的网络游戏的接入网关Server(gated)和逻辑Server(zoned)。 转这个主要是看代码质量不错. 转自CSDN的herm_lib http://hi.csdn.net/herm_lib

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧