• 1、Node.Js环境准备

在win8 + vs.net 2012 环境下调试了很长时间没搞定安装编译问题,重装系统测试了2套环境,解决了编译问题:

1)Win8.1 + vs.net 2013

2) ubuntu server 64位

node.js 依赖库安装调试有点小麻烦,差点就放弃了,就以调试经验大概记录下来。

方案1)Win8.1  64位+ vs.net 2013

  • 安装node.js

http://nodejs.org/download/

  • vs.net 2013集成开发环境

http://nodejstools.codeplex.com/

  • python 2.7 (注意版本,版本过高调试问题非常多)

Our Downloads | Python.org
https://www.python.org/downloads/

  • 设置PATH环境变量

cmd 命令行:node –v 可以测试

方案2)ubuntu server 64位

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

2.cnpm库安装

国内网络原因,npm安装插件容易出问题,使用cnpm解决。

npm install -g cnpm --registry=http://r.cnpmjs.org
cnpm install [name]

3.protobuf序列化

安装:

cnpm install protobufjs

官方API及介绍:

https://github.com/dcodeIO/ProtoBuf.js

示例google protobuf 描述proto文件:trace.proto

   1:  message Traces{
   2:      repeated Trace Items = 1;
   3:  }
   4:  message Trace {  
   5:          required    string code = 1;  
   6:      required    int32 tradeTime=2;
   7:      optional     double    amount=3;
   8:      optional     int64    volume=4;
   9:      optional     bool    buyOrSell=5;
  10:      optional     int64    deals=6;
  11:      optional     double    price=7;
  12:      enum Exchange
  13:      {        
  14:          Shse=1;
  15:           Szse=2;    
  16:      };
  17:      optional     Exchange    exchange=8;
  18:  }  

4.Zeromq通信

  • 安装Zeromq
1、在http://www.zeromq.org/area:download页面下载最新的zeromq .
wget http://download.zeromq.org/zeromq-XXXXX.tar.gz
2
、安装相关软件
$ sudo apt-get install libtool autoconf automake
$ sudo apt-get install uuid-dev g++
$ sudo apt-get install python-dev
3、编译安装zmq
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

  • 安装zmq for node

cnpm install zmq

官方API介绍:

Node.js Binding - zeromq
http://zeromq.org/bindings:node-js

测试代码:

   1:  var protoBuf = require("protobufjs");
   2:  //protobufjs test
   3:  var builder  = protoBuf.loadProtoFile("trace.proto");
   4:  var     Rtquote =builder.build();
   5:   
   6:  var zlib = require('zlib');
   7:  var zmq = require('zmq');
   8:  var socket = zmq.socket('sub');
   9:  var port = "tcp://192.168.1.16:9178";
  10:  socket.identity = 'subscriber' + process.pid;
  11:  socket.connect(port);
  12:  console.log('connected!');
  13:   
  14:  socket.subscribe('Trace');
  15:   
  16:  var  i = 0;
  17:  socket.on('message', function(data) {
  18:       /*decode*/
  19:      var buf=data;
  20:          //console.log("packetType: " + buf.toString('utf8', 0, 26));
  21:            
  22:          //2.解压缩  自定义协议部分
  23:          var bodyBuffers = buf.slice(62,data.length);
  24:          //console.log("bodylength3:"+bodyBuffers.length);
  25:      
  26:          /*
  27:          if(bodyBuffers.length!=bodyLength)
  28:          {
  29:  
  30:              console.log(bodyBuffers.length+"!="+bodyLength);
  31:          }
  32:         */
  33:         
  34:          //body Gzip解压缩
  35:          zlib.gunzip(bodyBuffers,function(err, buffer) {
  36:            if (!err) {
  37:                  //console.log("gzip:"+buffer.length);
  38:                  var items =     Rtquote.Traces.decode(buffer);      
  39:                  //console.log("len:"+items.Items.length);    
  40:                  for(var i=0;i<items.Items.length;i++)
  41:               {
  42:                                  var item=items.Items[i];
  43:                                 console.log("code: "+item.code+" tradetime: "+item.tradeTime+" amount: "+item.amount+" volume: "+item.volume+" buyOrSell: "+item.buyOrSell+" deals: "+item.deals+" price: "+item.price+" exchange: "+item.exchange);
  44:               }                        
  45:            }
  46:      });
  47:  });
  48:   
  49:  console.log('Hello world');

运行:sudo node app.js 可以实时使用Zmq 接收数据,解压 ,序列化。

参考资料:

入门知识概览 · cnodejs/nodeclub Wiki · GitHub
https://github.com/cnodejs/nodeclub/wiki/%E5%85%A5%E9%97%A8%E7%9F%A5%E8%AF%86%E6%A6%82%E8%A7%88

Node.js(2)-protobuf zeromq gzip的更多相关文章

  1. WebStorm中配置node.js(Windows)

    WebStorm中配置node.js(Windows) 一.node 1.下载安装包 32 位 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi ...

  2. 玩转Node.js(四)-搭建简单的聊天室

    玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一 ...

  3. 玩转Node.js(三)

    玩转Node.js(三) 上一节对于Nodejs的HTTP服务进行了较为详细的解析,而且也学会了将代码进行模块化,模块化以后每个功能都在单独的文件中,有利于代码的维护.接下来,我们要想想如何处理不同的 ...

  4. 玩转Node.js(二)

    玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...

  5. 玩转Node.js(一)

    玩转Node.js(一) 在说Node.js之前,我们先来说说js,如果你也曾开发过前端,那么你一定接触到了这个叫JavaScript有趣的东西,而对于JavaScript,你只会基本的操作——为we ...

  6. windows平台 - 0基础学习node.js(一)

    首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...

  7. Node.js(转) -- 临时来说还看不懂!

    转自:http://blog.jobbole.com/53736/ 本文由 伯乐在线 - Lellansin 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译组. 介绍 JavaScri ...

  8. 深入浅出Node.js(一):什么是Node.js

    Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到 ...

  9. Node.js(window)基础(2)——node环境下的模块,模块间调用

    参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...

随机推荐

  1. Windows及Linux平台下的计时函数总结

    本文对Windows及Linux平台下常用的计时函数进行总结,包括精度为秒.毫秒.微秒三种精度的各种函数.比如Window平台下特有的Windows API函数GetTickCount().timeG ...

  2. Linux内核知识

    版本 linus树 Linux内核最初创始人--Linus Torvalds管理一个Linus树,linus树也称为主线(mainline).一般指的upstream,"上游",也 ...

  3. 我的WCF学习与强化系列文章

    1.WCF服务创建与使用(请求应答模式) 2.WCF服务创建与使用(双工模式) 3.WCF序列化 4.WCF实现方法重载 5.WCF会话(Session)与实例(Instance)管理 后面会继续更新 ...

  4. Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出

    从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...

  5. 《构建之法》第8、9、10章 读书笔记和Sprint总结

    第八章:需求分析 这章主要解析了需求的多面方面,不同的项目需要不同的手段,真正的需求稍纵即逝,需要靠火眼金睛和敏捷的身手来发现并抓住它们.另外,很多时候用户并不知道自己确切的需求,或者不愿意表达完整的 ...

  6. 常见浏览器兼容问题、盒模型2种模式以及css hack知识讲解

    什么是浏览器兼容问题?所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们 ...

  7. ADO.NET基础01

    数据库中数据的导入导出   在使用一些数据库时,很多时候都要将文件导入导出到指定的文件夹中: 数据的导入导出就必须用到stream函数,这就必须用到Using System.IO的命名空间: **在数 ...

  8. C#获取url中参数键值对的方法

    方法如下: /// <summary> /// 遍历Url中的参数列表 /// </summary> /// <returns>如:(?userName=keley ...

  9. Sql server脏读、更新丢失、不可重复读、幻象读问题及解决方案

    1.脏读:一个事务读到另外一个事务还没有提交的数据.解决方法:把事务隔离级别调整到READ COMMITTED,即SET TRAN ISOLATION LEVEL READ COMMITTED.这时我 ...

  10. Python入门笔记(15):对文件的操作(1)

    一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...