您当前的位置:首页 > 文章摘抄 > 正文

zeromq(为什么没有人用zeromq开发流媒体传输)

本文目录

  • 为什么没有人用zeromq开发流媒体传输
  • zeromq如何接收16进制数据
  • zeromq解决了什么问题
  • 各位大牛用过ZeroMQ没怎么样
  • zeromq 基于什么license
  • zeromq java 怎么使用安装
  • redis和zeromq怎么选择
  • windows下怎么使用zeromq
  • zeromq安装运行出现问题,请问该怎么解决

为什么没有人用zeromq开发流媒体传输

你好。建立了 VPS 虚拟服务器(windows server),然后安装了 python 和 zero mq。写了一个简单的 pub/sub 程序, pub 端放在 VPS 这里。你的采纳是我前进的动力,记得好评和采纳,互相帮助,如果我的回答没能帮助您,请继续追问。

zeromq如何接收16进制数据

 转换方法:  16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。  十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……,所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。  例如:  用竖式计算:  2AF5换算成10进制:  第0位: 5 * 16的0次方 = 5  第1位: F * 16的1次方 = 240  第2位: A * 16的2次方 = 2560  第3位: 2 * 16的3次方 = 8192  直接计算就是:  5 * 16的0次方 + F * 16的1次方 + A * 16的2次方 + 2 * 16的3次方 = 10997

zeromq解决了什么问题

很早就听说了zeromq 这个项目,当时不太在意.后来同事kasicass 对这个项目做了研究和分享 ,开始重视起这个项目来.1) libevent封装了对网络I/O,信号,定时器等的处理,可以基于它之上做网络层的开发.2) ACE封装了不同平台下的系统调用,也提供好几种网络编程的模型.然而,zeromq不是libevent,也不是ACE,因为它的主要特性是:面向消息进行通信.所以,它提供的是比libevent,ACE处在网络通信中更高一层的组件.使用它,程序员不再需要上面提到的libevent,ACE之类的库需要关心的东西,程序员如果要使用zeromq,只需要做如下的事情:1) 告知所使用的patten,比如request-reply,pub-sub,push-pull等(下面会详细解释这个pattern).2) 告知是用于机器之间,还是进程之间,线程之间的通信.然后,将所需要发送的数据封装到zeromq自带的msg结构体中发送出去,使用者自己关心如何序列化/反序列化这些数据,然后如何处理这些数据就是使用者的事情了.这样看上来,使用者要关注的事情”高”了一层,大部分的精力都可以放在业务逻辑之上了.简而言之,它让使用者的精力放在了通信模式和业务逻辑上,而不是更下面一层的网络层上.下面解释一下zeromq常用的几种网络pattern:1) request-reply就是一般的C/S架构中,client与server之间一问一答的通信模式,比如最经典的echo服务.需要注意的是,client发送一个request,server必须有一个回应.server端作为publish端,而任何连接到服务端的client都会成为subscribe端.也就是说,server端会把当前的所有需要publish出去的消息全部发送到当前连接上去的client上.3) push-pullserver端作为push端,而client端作为pull端.如果有多个client端同时连接到这个server,则服务器会在内部做一个负载均衡,采用平均分配的算法,将所有的消息均衡发布到client端上.看上去,很稀松平常?接下来亮点真的来了.考虑如下一种场景.一个server端做为一组服务器集群最上层的一个proxy,起到负载均衡的作用,将请求按照它下面对应服务器集群依次派发到不同的 client端进行处理.某个时刻可能处理的机器只有2台,而随着负载越来越大,可能需要3台机器了,这个时候如果使用zeromq的push-pull 搭建的proxy端,则可以不用对之前搭建的server,client端进行停机,只需要新启动一个client连接上去,proxy层就会自动根据当前的机器分配平均派发任务了.cool.实际上,这些模式并不是什么新东西,只不过zeromq为使用者做了一个封装,而不是像libevent,ACE等还局限在网络层部分的封装,它关注的是通信层,通信模式等.个人感觉,zeromq部分解决 了erlang所要解决的问题:在多台机器中通信,派发任务等,是分布式通信的利器,但是局限于语言的限制,它没有办法做的跟erlang一样的完善(erlang已经可以算的上一个简易微型的OS了),但是许多的时候,似乎只使用这一部分功能也就足够了.zeromq的代码量,截至到我目前阅读的2.0.10-stable版本,也只有不到2W行代码.提供出去的API也极为简单,但是内部的实现比较”绕”,zeromq是我阅读过的项目中少数的非常需要依赖调试工具跟进代码才能看懂代码流程的项目,同时代码中类的继承层次也比较多,阅读起来并不像它提供的API那样简单直白.后续会对其中的一些难点做一些分析.

各位大牛用过ZeroMQ没怎么样

就那样吧,有些特色,也有一些坑。适用于基于报文的通信协议,但报文尺寸不能太大,控制在几K左右效果最佳。完全不适用于基于流的协议比如类似FTP那种。API设计的不错,但背后干了太多的事,包括但不限于创建了一个线程池、一个epoll loop以及大量的动态内存分配,出问题之后不太好定位。和其它协议对接困难或者干脆就不行,比如对接HTTP之类。如果你的场景是大量小消息的PUBSUB,ZMQ还可以一用,其它场景不建议。

zeromq 基于什么license

很早就听说了zeromq 这个项目,当时不太在意.后来同事kasicass 对这个项目做了研究和分享 ,开始重视起这个项目来.1) libevent封装了对网络I/O,信号,定时器等的处理,可以基于它之上做网络层的开发.2) ACE封装了不同平台下的系统调用

zeromq java 怎么使用安装

首先http://download.zeromq.org/1.下载最新版的zeromq http://download.zeromq.org/zeromq-3.1.0-beta.tar.gz2 解压 tar -xvf zeromq-3.1.0-beta.tar.gz3 运行configure ./configure --prefix=/data/zeromq (prefix 指定安装目录)4. make5. make install6. 设置环境变量 export CPPFLAGS=-I/home/mine/0mq/include/ export LDFLAGS=-L/home/mine/0mq/lib/ 7.测试代码server.c########################################include 《/data/zeromq/include/zmq.h》#include 《stdio.h》#include 《unistd.h》#include 《string.h》#include 《stdlib.h》int main (void){ void *context = zmq_init (1);// Socket to talk to clients void *responder = zmq_socket (context, ZMQ_REP); zmq_bind (responder, “tcp://192.168.0.185:5555“); printf(“binding on port 5555.\nwaiting client send message...\n“); while (1) { // Wait for next request from client zmq_msg_t request; zmq_msg_init (&request); char buf; zmq_recv (responder,buf, &request, 0); int size = zmq_msg_size (&request); char *string = malloc (size + 1); memset(string,0,size+1); memcpy (string, zmq_msg_data (&request), size); printf (“Received Hello string=[%s]\n“,string); free(string); zmq_msg_close (&request); // Do some ’work’ sleep (1); // Send reply back to client zmq_msg_t reply; char res={0}; snprintf(res,127,“reply:%d“,random()); zmq_msg_init_size (&reply, strlen(res)); memcpy (zmq_msg_data (&reply), res, strlen(res)); char buf2; zmq_send (responder, buf2, &reply, 0); zmq_msg_close (&reply); } // We never get here but if we did, this would be how we end zmq_close (responder); zmq_term (context); return 0;}#########################################################client.c#include 《zmq.h》 #include 《string.h》 #include 《stdio.h》 #include 《unistd.h》 int main () { void *context = zmq_init (1); // Socket to talk to server printf (“Connecting to hello world server...\n“); void *requester = zmq_socket (context, ZMQ_REQ); zmq_connect (requester, “tcp://192.168.0.185:5555“); int request_nbr; for (request_nbr = 0; request_nbr != 10; request_nbr++) { zmq_msg_t request; zmq_msg_init_data (&request, “Hello“, 6, NULL, NULL); printf (“Sending request %d...\n“, request_nbr); zmq_send (requester, &request, 0,0); printf(“send over“) ; zmq_msg_close (&request); zmq_msg_t reply; zmq_msg_init (&reply); zmq_recv (requester, &reply, 0,0); printf (“Received reply %d: [%s]\n“, request_nbr, (char *) zmq_msg_data (&reply)); zmq_msg_close (&reply); } zmq_close (requester); zmq_term (context); return 0; } gcc server.c -o server -lzmq -L/data/zeromq/lib -I/data/zeromq/include gcc client.c -o client -lzmq -L/data/zeromq/lib -I/data/zeromq/include ./server./clientjzmq 是zeromq 的java客户端 下载地址https://github.com/zeromq/jzmq/downloads 1. tar xzf zeromq-jzmq-semver-90-g58c6108.tar.gz2. ./configure 这个时候需要上面环境变量的配置, 还需要 随便 vi /data/zeromq/.bashrc export PATH=$PATH:/data/zeromq/include export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/zeromq/lib:/data/zeromq/include 只要configure 执行完毕就会生成makefile文件3.make4.make install测试 hwserver.java //// Hello World server in Java// Binds REP socket to tcp://*:5555// Expects “Hello“ from client, replies with “World“//// Naveen Chawla 《naveen.chwl@gmail.com》//import org.zeromq.ZMQ; public class hwserver { public static void main(String args) { // Prepare our context and socket ZMQ.Context context = ZMQ.context(1); ZMQ.Socket socket = context.socket(ZMQ.REP); socket.bind (“tcp://*:5555“); while (true) { byte request; // Wait for next request from client // We will wait for a 0-terminated string (C string) from the client, // so that this server also works with The Guide’s C and C++ “Hello World“ clients request = socket.recv (0); // In order to display the 0-terminated string as a String, // we omit the last byte from request System.out.println (“Received request: [“ + new String(request,0,request.length-1) // Creates a String from request, minus the last byte + “]“); // Do some ’work’ try { Thread.sleep (1000); } catch(InterruptedException e){ e.printStackTrace(); } // Send reply back to client // We will send a 0-terminated string (C string) back to the client, // so that this server also works with The Guide’s C and C++ “Hello World“ clients String replyString = “World“ + “ “; byte reply = replyString.getBytes(); reply[reply.length-1]=0; //Sets the last byte of the reply to 0 socket.send(reply, 0); } }}hwclient.java //// Hello World client in Java// Connects REQ socket to tcp://localhost:5555// Sends “Hello“ to server, expects “World“ back//// Naveen Chawla 《naveen.chwl@gmail.com》//import org.zeromq.ZMQ; public class hwclient{ public static void main(String args){ // Prepare our context and socket ZMQ.Context context = ZMQ.context(1); ZMQ.Socket socket = context.socket(ZMQ.REQ); System.out.println(“Connecting to hello world server...“); socket.connect (“tcp://localhost:5555“); // Do 10 requests, waiting each time for a response for(int request_nbr = 0; request_nbr != 10; request_nbr++) { // Create a “Hello“ message. // Ensure that the last byte of our “Hello“ message is 0 because // our “Hello World“ server is expecting a 0-terminated string: String requestString = “Hello“ + “ “; byte request = requestString.getBytes(); request[request.length-1]=0; //Sets the last byte to 0 // Send the message System.out.println(“Sending request “ + request_nbr + “...“); socket.send(request, 0); // Get the reply. byte reply = socket.recv(0); // When displaying reply as a String, omit the last byte because // our “Hello World“ server has sent us a 0-terminated string: System.out.println(“Received reply “ + request_nbr + “: [“ + new String(reply,0,reply.length-1) + “]“); } }} javac -classpath /data/jzmq/share/java/zmq.jar -d . h*.java java -Djava.library.path=/data/jzmq/lib -cp /data/jzmq/share/java/zmq.jar:. hwserverjava -Djava.library.path=/data/jzmq/lib -cp /data/jzmq/share/java/zmq.jar:. hwclient 显示内容: server端Received request: [Hello]Received request: [Hello]Received request: [Hello]Received request: [Hello]Received request: [Hello]Received request: [Hello]client端Connecting to hello world server...Sending request 0...Received reply 0: [World]Sending request 1...Received reply 1: [World]Sending request 2...Received reply 2: [World]Sending request 3...Received reply 3: [World]Sending request 4...Received reply 4: [World]Sending request 5...

redis和zeromq怎么选择

在我的整个职业生涯里我都在使用C++,而且现在C++依然是我做大多数项目时的首选编程语言。自然的,当我从2007年开始做ZeroMQ(ZeroMQ项目主页)时,我选择用C++来实现。主要的原因有以下几点:1. 包含数据结构和算法的库(STL)已经成为这个语言的一部分了。如果用C,我将要么依赖第三方库要么不得不自己手动写一些自1970年来就早已存在的基础算法。2. C++语言本身在编码风格的一致性上起到了一些强制作用。比如,有了隐式的this指针参数,这就不允许通过各种不同的方式将指向对象的指针做转换,而那种做法在C项目中常常见到(通过各种类型转换)。同样的还有可以显式的将成员变量定义为私有的,以及许多其他的语言特性。3. 这个观点基本上是前一个的子集,但值得我在这里显式的指出:用C语言实现虚函数机制比较复杂,而且对于每个类来说会有些许的不同,这使得对代码的理解和维护都会成为痛苦之源。

windows下怎么使用zeromq

Windows下VS2008使用ZeroMQ说明

一、下载ZeroMQ

二、编译ZeroMQ库文件

解压zeromq-4.0.3.zip文件,进入builds\msvc目录,用VS打开*.sln工程文件,编译生成解决方案。编译完成后,会在lib目录下生成dll和lib文件

三、编写简单的测试工程

  • 用VS新建2个项目,一个是server端,一个是client端

  • 将ZeroMQ源码项目的include目录下的两个文件“zmq.h”,“zmq_utils.h”拷贝至自己新建的工程

  • 将ZeroMQ源码项目的lib目录下的两个文件“libzmq.dll”,“libzmq.lib”拷贝至自己新建的工程

  • 将文件“zmq.h”,“zmq_utils.h”和“libzmq.lib”添加进自己新建的项目。

  • client端代码:

  • #include 《stdio.h》

    #include 《iostream》

    #include 《string.h》

    #include “zeroMQ/zmq.h“

    #include “zeroMQ/zmq_utils.h“

    int main(int argc,char** argv)

    {

    //zeroMQ相关变量

    void * m_context;

    void * m_subscriber;

    char   m_pubAddr;

    m_context = zmq_init (1);

    m_subscriber = zmq_socket (m_context, ZMQ_SUB);

    //订阅

    char * puberIP = “127.0.0.1“;

    WORD puberPort = 8585;

    memset(m_pubAddr,0,sizeof(m_pubAddr));

    sprintf(m_pubAddr,“tcp://%s:%d“,puberIP,puberPort);

    //zmq_connect (m_subscriber, “tcp://localhost:5556“);

    zmq_connect (m_subscriber, m_pubAddr);

    int ret = zmq_setsockopt (m_subscriber, ZMQ_SUBSCRIBE, NULL, 0);

    while(1)

    {

    BYTE buf = {0};

    DWORD buflen = sizeof(buf);

    DWORD gotLen = zmq_recv(m_subscriber,buf,buflen,0);

    printf(“收到发布信息:%s\n“,buf);

    }

    zmq_close (m_subscriber);

    zmq_term (m_context);

    return 0;

    6.server端代码:

    #include《stdio.h》

    #include《string.h》

    #include《stdlib.h》

    #include “zeroMQ/zmq.h“

    #include “zeroMQ/zmq_utils.h“

    int main(int argc,char** argv)

    {

    char pubLocalAddr = {0};

    sprintf(pubLocalAddr,“tcp://*:%d“,8585);

    //zeroMQ相关变量

    void * m_context;

    void * m_publisher;

    m_context   = zmq_init (1);

    m_publisher = zmq_socket (m_context, ZMQ_PUB);

    zmq_bind (m_publisher, pubLocalAddr);

    char *msg = “1231321“;

    while(1)

    {

    DWORD sendlen = zmq_send(m_publisher,msg,strlen(msg),0);

    printf(“发布信息:%s\n“,msg);

    Sleep(1000);

    }

    zmq_close (m_publisher);

    zmq_term (m_context);

    return 1;

    }

    zeromq安装运行出现问题,请问该怎么解决

    首先,运行vs2013,打开解决方案\zeromq-4.0.5\builds\msvc\msvc.sln,系统提示转换方案,选择是即可。设置配置为release win32。执行“生成/生成解决方案”,没有意外的话构建会成功。生成的libzmq.lib位于\zeromq-4.0.5\builds\msvc\Release,libzmq.dll则位于\zeromq-4.0.5\lib中,将libzmq.lib拷贝到\zeromq-4.0.5\lib目录,方便后面安装jzmq。


    声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

    上一篇: csrcsc(scipy csc csr到底是什么东西)

    下一篇: oracle存储过程(oracle的存储过程)



    推荐阅读