ZeroMQ初体验——hello world

群里最近在说网络库的东西,群主推荐说可以看看ØMQ,说非常精简,而且支持多种语言,非常高效率,于是下载来看看。

ØMQ官网 www.zeromq.org

Guide还没看完,大概先看了下,觉得很精简,而且写的非常清里面包含了多种设计模式的应用,建议大家有时间看看。

所有网络交互所使用的API实际上是Berkeley套接字(BSD) 。这个源自1980年代早期的协议是TCP/IP协议的最原始实现。而且可以说,在当今各操作系统中,它是受到最广泛支持的API,也是这些操作系统的核 心组件之一。人们对BSD套接字的了解较多的是点对点的连接。点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等。一旦你 解决了以上所有问题,你就进入应用协议层(如HTTP)的世界了,这里需要的是组帧、缓存和处理逻辑等。换言之,编写高性能网络协议的应用程序一点儿也不 复杂。

如果我们能对各种套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,这不是件很好的事情吗?这正是ZeroMQ(ØMQ/ZMQ)网络库的由来:“它提供一些跨多种传输协议(如进程内通讯、IPC、TCP和广播)的套接字供你使用。你可使用多种方式实现N对N的套接字连接,譬如:扇出、发布订阅、任务分发以及请求响应。”

ØMQ是网络栈中新的一层,它是个可伸缩层,分散在分布式系统间。因此,它可支持任意大的应用程序。ØMQ不是简单的点对点交互,相反,它定义了分布式系统的全局拓扑。ØMQ应用程序没有锁,可并行运行。此外,它可在多个线程、内核和主机盒之间弹性伸缩。

  • ZeroMQ交互是面向消息的。它将人们每天为应用程序周而复始地进行的例行消息处理封装起来。这意味着如果当客户端套接字发送一条150KB大小的消息时,服务端套接字无需显式处理任何缓存(buffer)或组帧,即能接接收到一条完整而相同的消息。
  • ZeroMQ套接字与传输协议无关:对于任何协议,只有单一且统一的发送消息和接收消息API。缺省情况下支持进程内通讯、IPC、广播和TCP。此外,协议间切换非常简单,仅需更改连接字符串的前缀即可。
  • ZeroMQ套接字能感知路由和网络拓扑。因为我们不再需要显示地管理点对点的连接状态——在上面我们已经看到,所有这些都已经由 ZeroMQ库封装好——所以单个ZeroMQ套接字可以绑定两个独立的端口并监听他们的入站请求消息;也可使用一个API调用向两个独立的套接字发送数 据。
  • TCP:ZeroMQ基于消息,消息模式,而非字节流。
  • XMPP:ZeroMQ更简单、快速、更底层。Jabber可建在ØMQ之上。
  • AMQP:完成相同的工作,ZeroMQ要快100倍,而且不需要代理(规范更简洁——少278页)
  • IPC:ZeroMQ可以跨多个主机盒,而非单台机器。
  • CORBA:ZeroMQ不会将复杂到恐怖的消息格式强加于你。
  • RPC:ZeroMQ完全是异步的,你可以随时增加/删除参与者。
  • RFC 1149:ZeroMQ比它快多了!
  • 29west LBM:ZeroMQ是自由软件!
  • IBM低延迟:ZeroMQ是自由软件!
  • Tibco:仍然是自由软件!

看了第一部分的guide,试了试最简单的hello world,觉得非常好用,完全可以用来做聊天软件或者游戏的消息内核。

下载ØMQ最新版本,3.0.2Beta版本,zeromq-3.0.2\builds\msvc路径下有一个msvc.sln文件,这个是VS2008的解决方案文件,我用的是VS2010,转换完后编译,我自己按照Debug和Release分开编译生成的,方便工程使用,特别强调下,编译完最外层文件夹Lib中会生成一个libzmq.dll的文件,使用该库编译的程序必须得有该链接库才可以运行。(不知道为什么官网要这样做,直接变成Lib文件,然后使用就可以了,还得转两次,如果需要Lib文件的同学可以自己将他编译为Lib文件。)

在自己工程中添加头文件和库文件路径,然后开始编写测试代码。

建立两个工程一个为ZMQServer 一个为ZMQTest

代码片段如下:

这样一个简单的网络程序就写好了,无需你对网络协议和网络编程多熟悉就可以完成,非常简单实用,大家有兴趣可以看下。后面我会对现有的几个网络库慢慢研究的(ZMQ RakNet IOCP LibEvent ICE等),希望大家继续关注!



本文固定链接: http://www.cppfans.org/1018.html | C++爱好者博客

你可能感兴趣的:(ZeroMQ初体验——hello world)