最近做后台发现很多地方需要队列,我用东西一般有两个要求:
      1) 够傻够简单
      2) 有源码,能看又能改
    最后相中了0mq,下面介绍如何安装和写个简单的例子。
一. linux平台:ubuntu&python。

安装
软件下载页面:
http://www.zeromq.org/intro:get-the-software
1. prerequisites安装:
sudo apt-get install libtool autoconf automake uuid-dev build-essential
2. 下载解压安装包:
wget http://download.zeromq.org/zeromq-2.1.11.tar.gz
tar -zxf zeromq-2.1.11.tar.gz
3. 编译安装:
./configure & make
sudo make install
4. 刷新库:
sudo ldconfig
5. 安装python开发环境:
sudo apt-get install python-dev python-setuptools
6. 安装python的0mq库:
简单安装:
sudo easy_install pyzmq (可能失败,鳖在这里就O了)
手动安装:
wget https://github.com/downloads/zeromq/pyzmq/pyzmq-2.1.11.zip
unzip pyzmq-2.1.11.zip
cd pyzmq-2.1.11
sudo python setup.py install --zmq=/usr/local

简单例子:hello world

client

#encoding=utf-8
# Hello World client in Python
# Connects REQ socket to tcp://localhost:5555
# Sends "Hello" to server, expects "World" back
#
import zmq context = zmq.Context() #欢迎信息
print "正在连接hello world服务器"
socket = context.socket(zmq.REQ) #socket 模式通讯
socket.connect ("tcp://localhost:5555") # 连接到本地的5555端口 #发出10次请求,每次等待服务器的一个响应
for request in range (1,10):
print "客户端发送请求", request,"..."
socket.send ("土鳖,你好吗?") #获取服务器响应
message = socket.recv()
print "客户端收到回复", request, "[", message, "]"
server

#encoding=utf-8
# Hello World server in Python
# Binds REP socket to tcp://*:5555
# Expects "Hello" from client, replies with "World"
#
import zmq
import time context = zmq.Context()
socket = context.socket(zmq.REP) #socket模式通讯
socket.bind("tcp://*:5555") #监听5555端口,等待请求 while True:
#等待从客户端发送的请求
message = socket.recv()
print "服务器收到请求: ", message #干点啥,鳖喜欢睡,所以睡会
time.sleep (1) #向客户端发送请求
socket.send("土鳖不好:(")

运行命令:
python hwserver.py & python hwclient.py

运行结果:

正在连接hello world服务器
客户端发送请求 1 ...
服务器收到请求: 土鳖,你好吗?
客户端收到回复 1 [ 土鳖不好:( ]
客户端发送请求 2 ...
服务器收到请求: 土鳖,你好吗?
客户端收到回复 2 [ 土鳖不好:( ]
客户端发送请求 3 ...
。。。

注意: 运行第二次必须关闭服务器:pkill python, 因为客户端跑完10个请求就自动退出了,服务器会一直运行。

相关资料:
pyzmq 例子:https://github.com/imatix/zguide/tree/master/examples/Python
pyzmq 文档: http://zeromq.github.com/pyzmq/

二. windows平台:windows7&C#。

1. 在页面http://www.zeromq.org/bindings:clr
下载clr版本的源代码。
下载链接:http://github.com/zeromq/clrzmq
2. 解压后打开src目录下面的clrzmq.sln,然后生成整个解决方案。
3. 新建一个C#控制台应用程序ZmqHello。
从src\packages\libzmq.3.1.1-beta1\Content\lib\x86目录下复制libzmq.dll和libzmq.dll.pdb到ZmqHello
项目的bin\Debug目录下。这个库是本机代码,clr通过interop与之通讯。如果你的系统是64位,复制x64目录下的文件。
4. 项目引用中添加.net版本的zmq库clrzmq.dll,所在目录是src\ZeroMQ\bin\Debug。
5. 编写hello world程序,下面是客户端和服务器代码:

C#

    class Program
{
static void Main(string[] args)
{
//构建服务器和客户端线程
var client = new Thread(ClientThread);
var server = new Thread(ServerThread); //开始执行线程
server.Start();
client.Start(); //等待线程执行完毕
server.Join();
client.Join();
} private static void ClientThread()
{
Thread.Sleep(); using (var context = ZmqContext.Create())
using (var socket = context.CreateSocket(SocketType.REQ))
{
//连接服务器
socket.Connect("tcp://localhost:8989");
//发送消息
string msg = "土鳖,你好吗";
socket.SendFrame(new Frame(Encoding.UTF8.GetBytes(msg)));
Console.WriteLine("客户端发送请求:" + msg);
var buffer = new byte[];
int size = socket.Receive(buffer);
string recvMsg = Encoding.UTF8.GetString(buffer, , size);
Console.WriteLine("客户端收到回复:" + recvMsg);
}
} private static void ServerThread()
{
//创建上下文和socket
using (var context = ZmqContext.Create())
using (var socket = context.CreateSocket(SocketType.REP))
{
//服务器监听8989端口
socket.Bind("tcp://*:8989");
//接收客户端请求
Frame request = socket.ReceiveFrame();
string msg = Encoding.UTF8.GetString(request);
Console.WriteLine("服务端收到请求:" + msg); string sendMsg = "土鳖不好:(";
socket.SendFrame(new Frame(Encoding.UTF8.GetBytes(sendMsg)));
Console.WriteLine("服务端发送回复:" + sendMsg);
}
}
}

6. 运行后,结果如下:

  codeplex上面还有个更强大的库:http://zeromq.codeplex.com/
  有兴趣的同学可以研究一下。

更复杂的例子在clrmq解决方案(刚才下载解压后打开的那个)的Tests目录下。
      文档没找到专门针对C#的,只有一个通用的:
      http://zguide.zeromq.org/page:all 
    手册也没找到专门的,下面是c的,凑活着看吧:
  http://api.zeromq.org/

0mq 入门 (转)的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  4. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  5. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  6. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. luogu P1502 窗口的星星

    题目链接 P1502 窗口的星星 题解 扫描线+线段树 线段树的每一个节点处理的是左边框放在当前x-1位置时的框内星星的亮度大小 按照x坐标进行离散化,得到离散化后每一个坐标x的可影响的范围 维护扫描 ...

  2. SPFA算法 O(kE)

    主要思想是:     初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队.直到队列为空时算法结束.     这个算法,简单的说就是队列优化 ...

  3. hdu 4605 树状数组 ****

    题目大意很简单. 有一颗树(10^5结点),所有结点要么没有子结点,要么有两个子结点.然后每个结点都有一个重量值,根结点是1 然后有一个球,从结点1开始往子孙结点走. 每碰到一个结点,有三种情况 如果 ...

  4. jQuery.fn.extend()和jQuery.extend()

    jQuery.fn.extend( object ) 一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法. jQuery.fn.extend()方法继承了jQuery原型($.fn ...

  5. JavaScript基础之运算符及全面的运算符优先级总结

    算数运算符: 加+,减—,乘*,除/,求余%,加加++,减减——, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaS ...

  6. 使用 IntraWeb (24) - 基本控件之 TIWFileUploader、TIWFile

    TIWFileUploader 是基于 Ajax 的上传控件, 最初是 Andrew Valums 开发, 从 IntraWeb XIV 纳入并替换 TIWFile. 虽然从组件面板上还能看到 TIW ...

  7. LPC LINK2 IO CONNECTOR

  8. An Isolated DAC Using PWM Output

    An Isolated DAC Using PWM Output Arduino‘s (ATmega328P) PWM outputs via analogWrite can be convenien ...

  9. svn 迁移到 git 仓库并保留 commit 历史记录

    1.svn 转换为 git(会提示,让你输入先前 svn 的账号与密码) # 切换至 本地项目目录 cd /Users/jianbao/PhpStormProjects/fiisoo/ # 克隆 sv ...

  10. MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器

    一.设置使用的Tomcat服务器 如果不想使用MyEclipse自带的tomcat服务器版本,那么可以在MyEclipse中设置我们自己安装好的tomcat服务器 设置步骤如下: Window→Pre ...