游戏技术文章

0mq 入门

时间:2016-12-29 13:14:23  作者:棋牌资源网  来源:棋牌资源网  查看:7693  评论:0
内容摘要: 最近做后台发现很多地方需要队列,我用东西一般有两个要求:      1) 够傻够简单。      2) 有源码,能看又能改。    最后相中了0mq,下面介绍如何安装和写个简单的...
 最近做后台发现很多地方需要队列,我用东西一般有两个要求:

      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

复制代码
0mq_入门
复制代码
#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, "]"
复制代码
复制代码

 

复制代码
0mq_入门
复制代码
#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程序,下面是客户端和服务器代码:

复制代码
0mq_入门
复制代码
    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(10);

            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[100];
                int size = socket.Receive(buffer);
                string recvMsg = Encoding.UTF8.GetString(buffer, 0, 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. 运行后,结果如下:

0mq_入门

 

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

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

标签:0mq入门 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


上一篇:easyui简单使用
下一篇:windows钩子

本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2022 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved