Node.js(2)-protobuf zeromq gzip
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
- 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 Exchange13: {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 test3: 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的更多相关文章
- WebStorm中配置node.js(Windows)
WebStorm中配置node.js(Windows) 一.node 1.下载安装包 32 位 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi ...
- 玩转Node.js(四)-搭建简单的聊天室
玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一 ...
- 玩转Node.js(三)
玩转Node.js(三) 上一节对于Nodejs的HTTP服务进行了较为详细的解析,而且也学会了将代码进行模块化,模块化以后每个功能都在单独的文件中,有利于代码的维护.接下来,我们要想想如何处理不同的 ...
- 玩转Node.js(二)
玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...
- 玩转Node.js(一)
玩转Node.js(一) 在说Node.js之前,我们先来说说js,如果你也曾开发过前端,那么你一定接触到了这个叫JavaScript有趣的东西,而对于JavaScript,你只会基本的操作——为we ...
- windows平台 - 0基础学习node.js(一)
首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...
- Node.js(转) -- 临时来说还看不懂!
转自:http://blog.jobbole.com/53736/ 本文由 伯乐在线 - Lellansin 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译组. 介绍 JavaScri ...
- 深入浅出Node.js(一):什么是Node.js
Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到 ...
- Node.js(window)基础(2)——node环境下的模块,模块间调用
参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...
随机推荐
- NodeJS+Mongodb+Express做CMS博客系统
楼主正在用业余时间开发中-- ,目前的版本仅支持会员系统,尝鲜一下吧~ hi-blog 一个 nodejs+express+mongodb 的 cms 系统 怎么启动 默认你已经安装了 mongodb ...
- iOS 9.2新增API
CloudKit 新增CKFetchWebAuthTokenOperation类 CKFetchWebAuthTokenOperation对象从使用指定的cloudkit中的APIToken获取一个w ...
- 关于 CommonJS AMD CMD UMD 规范的差异总结
一.CommonJS 主要是用于服务器端的规范,比如目前的nodeJS. 根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函 ...
- 客户关系管理系统(CRM)的开发过程中使用到的开发工具总结
开发<客户关系管理系统(CRM)>软件过程,也就是一个标准的Winform程序的开发过程,我们可以通过这个典型的软件开发过程来了解目前的开发思路.开发理念,以及一些必要的高效率手段.本篇随 ...
- SQLDMOHelper
在网上传闻SQLDMO是个好东西,当时没有注意这个传闻是什么时候了,后来才在微软的官网上看见,从SQL Server2008开始就不用SQLDMO了,取而代之的是SMO.无奈了,还写了个Helper. ...
- Dev 饼图
// 添加引用命名空间 using DevExpress.XtraCharts; /* *具体步骤:(1)先构建饼图对象的数据源DataTable * (2)再设置饼图对象的相关参数 * (3)饼图空 ...
- 可以调整gif动画图片尺寸的很实用的php类
类的使用demo: <?php //http://www.cnblogs.com/roucheng/ require_once "roucheng.php"; $gr = n ...
- Python入门笔记(11):集合
一.目录 1.集合概述 2.关于集合的操作符.关系符号 3.集合的一系列操作(添加.更新.访问.删除) 4.关于集合的内建函数.内建方法 5.小结 二.集合概述 集合(set):把不同的元素组成一起形 ...
- 动态生成RDLC报表
前段时间,做了RDLC报表,主要是三块功能: 1.从DataGrid提取(包括最新的增删改)的数据,自动生成对应的RDLC报表文件(以流的形式驻存在内存中),用ReportViewer类来展示.打印. ...
- 重新想象 Windows 8 Store Apps (71) - 其它: C# 调用 C++
[源码下载] 重新想象 Windows 8 Store Apps (71) - 其它: C# 调用 C++ 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 其它 C# ...