Herm

高性能的网络应用的C++库
授权协议 GPL
开发语言 C/C++
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 国产
投 递 者 佴阳曦
操作系统 Windows
开源组织
适用人群 未知
 软件概览

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章介绍。

三者调用关系:

Framework----->Socket---->Utils

Framework------------------->Utils

Herm目前仅支持Linux/Windows/FreeBSD 32bits平台。调用者可以基于不同的需求使用不同的组件。

  • Allocator可以理解特定对象池。Herm目前有两种Allocator,LiteAllocator和LargeAllocator,前者支持小于120bytes的小对象;后者支持大对象,建议大于120byte以上的对象使用LargeAllocator,小对象当然也支持,但会浪费内存,每个对象将附加8bytes的内存空间。STL也可以直接用Herm的Allocator作为Allocator。 Li

  • Herm实现了自己的两种类型的Timer,Heap和Wheel。Timer主要有三种操作,AddTimer, CheckTimout和RemoveTimer。 Timer Heap性能是O(log2n) O(1) O(log2n) Timer Wheel全是O(1), 首选。   Timer Heap大致实现方法是基于最小堆。 1. 检查堆的root节点,如果没超时,结束;有超时,加入pendin

  • http://blog.csdn.net/herm_lib     daemon.huang # gmail # com   2.1 概述 本章从网络通信组件的结构开始,简单地介绍一种较常用的通信组件结构。接着结合通信组件的结构来说明Framework的实现,描述Framework的对象模型,Network、Peer和Session。最后,分析Framework实现的时候采用了哪些措施保证性能,以

  •        今年爱马仕也不断寻求不同领域的合作,爱马仕钟表与瑞士著名珐琅艺术大师Anita Porchet合作,将大明火珐琅的极致工艺与爱马仕的艺术诉求完美结合,一枚枚珍贵的珐琅腕表经由Anita Porchet的双手呈献给大家,每一年,爱马仕的珐琅腕表都是爱表人士、专业收藏家的期待和追捧的腕表精品。

  • http://blog.csdn.net/herm_lib     daemon.huang # gmail # com   1.1 什么是Herm       Herm是一套快速开发高性能的网络应用的C++库,主要针对网络游戏服务器提供全套解决方案,包括接入、网游逻辑、数据缓存和持久化组件。但同时Herm也适合可以用于即时通信、流媒体、文件下载、P2P(Socket组件实现的细节已经考虑到对TC

  • 分发框架管理一个树状的Handlers,Handler分为通用的(general)和专有的(specific)。通用的Handler是为所有的对象服务;专有的Handler是为某个对象服务(常见的是Role)。框架结构描述如下:         cmd1----->handlers         cmd2----->handlers         cmdN----->handlers     

  • http://blog.csdn.net/herm_lib     daemon.huang # gmail # com   第1章 概述 第2章 Herm Framework和网络通信组件 第3章 Herm Framework实例 第4章 Herm Socket 第4章 Herm Utils

  • cached根据protobuf的元数据机制去保存和读取数据库中的数据。 为了简化服务器交互的复杂度,逻辑服务器用的protobuf和cached的protobuf,数据结构要完全一致。 不一致的话,会出现不确定的错误。比如,逻辑服务器用Msg1序列化数据,传给cached, cached却用Msg2去解析,重组,保存到DB。结果就全乱了! 所以,逻辑服务器连接cached成功后,先要保证prot

 相关资料
  • 我正在研究一个基于代理的流行病模型。这个想法是单个代理根据他们在网络中观察到的情况(基于距离)做出决定。我在每个代理中都有几个功能,可以动态更新受感染接触者的数量,接触者表现出特定行为等。 下面的代码用于计算代理网络中受感染的联系人。 至少还有3个这样的函数可以保持表示代理网络中其他功能的其他代理的计数。现在,当我 有没有一种计算效率更高的方法来跟踪更大人口的网络统计数据?

  • 问题内容: 我正在选择一个网络库来实现不能花费任何微秒时间的客户端/服务器系统。它将实现自己的协议来发送和接收消息。我正在寻找一个好的NIO框架,该框架将使我能够轻松开发服务器和客户端,而不必过多担心低层选择器的细节。每个人都向我推荐Netty,但在向团队提出框架之前,我想尝试2或3个其他选择。我不太喜欢Netty的一件事是它如何使用自己的ByteBuf实现和引用计数来处理ByteBuffer。谁

  • 最简单的经验法则之一是记住硬件喜欢数组,并且针对数组的迭代进行了高度优化。对许多问题的一个简单优化只是停止使用花哨的数据结构,只使用简单的数组(或C++中的std::vectors)。这需要一些时间来适应。 C++类是那种“奇特的数据结构”,即一种可以用数组代替的数据类型,以在C++程序中获得更高的性能吗?

  • HTTP 分布式系统

  • HTTP 超文本传输协议 (HTTP) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。 Requests Python 基本的 urllib2 模块提供了大部分你所需要的 HTTP 功能,但它的 API 彻底被打乱了。它是在一个和现今完全不同的时期 --- 以及一个不一样的网络被构建的。一个简单的任务便需要耗费他大量的工作 (即使重写函数没用)。 Req

  • 摘要 本文描述了如何在 RT-Thread 中利用标准 BSD Socket API 来开发网络应用。并给出了在正点原子 STM32F4 探索者开发板上运行 NTP(通过网络获取时间)和 MQTT(通过 MQTT 收发数据) 的代码示例。 简介 越来越多的单片机需要接入以太网来收发数据,市面上也有非常多的接入方案,可以用单片机加自带硬件协议栈的 PHY 芯片来接入网络,也可以单片机跑软件协议栈加