菜鸟玩云计算之六:Ubuntu Server 12.10 上安装 nodejs, 消息队列zeromq

技术领域中的“合法开挂”:从机制红利到性能优化的深度解析 在软件开发和系统优化中,性能提升往往源于对底层机制的深刻理解而非破坏规则。从概念上讲,计算机系统的设计遵循通用原则,但在特定边界条件下,如极致利用数据局部性原理或编译器自动向量化(SIMD),会产生远超预期的“超常表现”。其技术价值在于,通过精准把控资源生命周期和并发模型,例如实现缓存命中率100%或连接池的瞬时响应,能将偶然的高效转化为稳定的生产力。这些原理广泛应用于数据库索引优化、前端渲染加速和后端高并发处理等场景。本文聚焦于技术世界中那些令人惊叹的“开挂名场面”,如通过覆盖索引实现数据库瞬间查询,或利 阅读详情
nodejs是一个基于google v8+javascript的服务端编程框架。对于搞云计算,用nj来做系统管理Web站点是非常合适的。理由是:

a.足够简单。
b.足够快。
c.足够小巧。
d.前后端一致性。

下面是安装步骤:

1 首先确保系统安装了python, gcc, g++,如果没有则安装:

$ sudo apt-get install python
$ sudo apt-get install build-essential
$ sudo apt-get install gcc
$ sudo apt-get install g++

2 安装 python bindings


2.1 安装python自动安装工具: easy_install

$ sudo apt-get install python-setuptools

2.2 安装python的编译环境

$ sudo apt-get install python-dev

2.3 安装 pythong zmq 的 binding:

$ sudo easy_install pyzmq

3 下载最新版源代码包:node-v0.8.14.tar.gz


3.1 解压:

$ sudo tar -zxf node-v0.8.14.tar.gz
$ cd node-v0.8.14

3.2 默认方式安装:


$ ./configure
$ make
$ sudo make install

3.3 选择目录方式安装:

$ ./configure --prefix=/opt/node
$ make -j 3     # 3=CPU核数+1
$ sudo make install

安装结束后, 用下面的命令检查安装的版本:
$ node --version
v0.8.14

3.4 接下来参考下面的文章开始你的nodejs编程之旅吧:


http://www.nodebeginner.org/index-zh-cn.html#a-full-blown-web-application-with-nodejs

4 zeromq

zmq 是一个基于c的消息队列编程框架。zeromq用处很多, 它具有:


a.足够简单。
b.足够快。
c.足够小巧。

等优点. 下面是安装步骤:

4.1 下载: zero-3.2.1

http://www.zeromq.org/

$ tar -xzf zeromq-3.2.1.tar.gz
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

4.2 下面写一个c的客户端mqclient.c和一个服务端mqserver.c测试:


  1. <span style="font-size:12px;">//  
  2. // mqclient.c  
  3. // Hello World client  
  4. // Connects REQ socket to tcp://localhost:5555  
  5. // Sends "Hello" to server, expects "World" back  
  6. //  
  7. #include <zmq.h>  
  8. #include <string.h>  
  9. #include <stdio.h>  
  10. #include <unistd.h>  
  11.   
  12. int main (void)  
  13. {  
  14.     void *context = zmq_ctx_new ();  
  15.   
  16.     // Socket to talk to server  
  17.     printf ("Connecting to hello world server…\n");  
  18.     void *requester = zmq_socket (context, ZMQ_REQ);  
  19.     zmq_connect (requester, "tcp://localhost:5555");  
  20.   
  21.     int request_nbr;  
  22.     for (request_nbr = 0; request_nbr != 10; request_nbr++) {  
  23.         zmq_msg_t request;  
  24.                   
  25.         zmq_msg_init_data (&request, "Hello", 6, 0, 0);  
  26.   
  27.         printf ("Sending Hello %d…\n", request_nbr);  
  28.         zmq_msg_send (&request, requester, 0);  
  29.         zmq_msg_close (&request);  
  30.                 printf ("prepare recv message\n");  
  31.   
  32.         zmq_msg_t reply;  
  33.         zmq_msg_init (&reply);  
  34.         if (-1==zmq_msg_recv (&reply, requester, 0)) {  
  35.             printf("recv data error.\n");  
  36.         }  
  37.         printf ("Received World %d\n", request_nbr);  
  38.         zmq_msg_close (&reply);  
  39.     }  
  40.     zmq_close (requester);  
  41.     zmq_ctx_destroy (context);  
  42.     return 0;  
  43. }</span>  


  1. <span style="font-size:12px;">//  
  2. // mqserver.c  
  3. // Hello World server  
  4. // Binds REP socket to tcp://*:5555  
  5. // Expects "Hello" from client, replies with "World"  
  6. //  
  7. #include <zmq.h>  
  8. #include <stdio.h>  
  9. #include <unistd.h>  
  10. #include <string.h>  
  11.   
  12. int main (void)  
  13. {  
  14.     int ret;  
  15.     char buf[5]="world";  
  16.     buf[5] = 0;  
  17.     void *context = zmq_ctx_new ();  
  18.   
  19.     // Socket to talk to clients  
  20.     void *responder = zmq_socket (context, ZMQ_REP);  
  21.     ret = zmq_bind (responder, "tcp://*:5555");  
  22.         if (ret==0) {  
  23.         printf("zmq_bind success\n");  
  24.     } else {  
  25.         printf("zmq_bind error=%d:%s\n", ret, strerror(errno));  
  26.         exit(ret);  
  27.         }  
  28.     while (1==1) {  
  29.         // Wait for next request from client  
  30.                 printf("wait for clients...\n");  
  31.         zmq_msg_t request;  
  32.         zmq_msg_init (&request);  
  33.         ret = zmq_msg_recv (&request, responder, 0);  
  34.         printf ("Received=%d\n", ret);  
  35.         zmq_msg_close (&request);  
  36.   
  37.         // Do some 'work'  
  38.         sleep (1);  
  39.   
  40.         // Send reply back to client  
  41.         zmq_msg_t reply;  
  42.         zmq_msg_init_data (&reply, buf, 6, 0, 0);  
  43.         ret = zmq_msg_send (&reply, responder, 0);  
  44.                 printf("zmq_msg_send ret=%d\n", ret);  
  45.         zmq_msg_close (&reply);  
  46.     }  
  47.     // We never get here but if we did, this would be how we end  
  48.     zmq_close (responder);  
  49.     zmq_ctx_destroy (context);  
  50.     return 0;  
  51. }</span>  


下面是编译命令:
$ gcc mqclient.c -o mqclnt -lzmq
$ gcc mqserver.c -o mqsrvr -lzmq

运行:
$ ./mqsrvr &

$ ./mqclnt

5 使用python来编写zeromq程序

参考:  http://zguide.zeromq.org/py:all


这是一个发布(PUB)和订阅(SUB)模型。发布者发布信息,订阅者接收并处理和自己相关的信息。一个发布者对应多个订阅者。

               |----->SUB a
PUB------>|----->SUB b
               |----->SUB c

5.1 发布者:mqpub.py


  1. <span style="font-size:12px;">#############################################################  
  2. # mqpub.py  
  3. # Weather update server  
  4. # Binds PUB socket to tcp://*:5556  
  5. # Publishes random weather updates  
  6. #############################################################  
  7.   
  8. import zmq  
  9. import random  
  10.   
  11. context = zmq.Context()  
  12. socket = context.socket(zmq.PUB)  
  13. socket.bind("tcp://*:5556")  
  14.   
  15. while True:  
  16.     zipcode = random.randrange(1,100000)  
  17.     temperature = random.randrange(1,215) - 80  
  18.     relhumidity = random.randrange(1,50) + 10  
  19.   
  20. socket.send("%d %d %d" % (zipcode, temperature, relhumidity))</span>  

5.2 订阅者:mqsub.py

  1. <span style="font-size:12px;">#############################################################  
  2. # mqsub.py  
  3. # Weather update client  
  4. # Connects SUB socket to tcp://localhost:5556  
  5. # Collects weather updates and finds avg temp in zipcode  
  6. #############################################################  
  7.   
  8. import sys  
  9. import zmq  
  10.   
  11. # Socket to talk to server  
  12. context = zmq.Context()  
  13. socket = context.socket(zmq.SUB)  
  14.   
  15. print "Collecting updates from weather server"  
  16. socket.connect ("tcp://localhost:5556")  
  17.   
  18. # Subscribe to zipcode, default is NYC, 10001  
  19. zip_filter = sys.argv[1] if len(sys.argv) > 1 else "10001"  
  20. socket.setsockopt(zmq.SUBSCRIBE, zip_filter)  
  21.   
  22. # Process 5 updates  
  23. total_temp = 0  
  24. for update_nbr in range (5):  
  25.     string = socket.recv()  
  26.     zipcode, temperature, relhumidity = string.split()  
  27.     total_temp += int(temperature)  
  28.   
  29. print "Average temperature for zipcode '%s' was %dF" % (zip_filter, total_temp / update_nbr)</span>  

5.3 打开2个终端,分别运行:

$ python ./mqpub.py

$ python ./mqsub.py


http://blog.youkuaiyun.com/ubuntu64fan/article/details/8131583

zeromq.js:Node.js绑定到ØMQ库 下一代ZeroMQ.js :warning: 6.0.0版(测试版)具有全新的API,可以解决许多基本问题,建议在新项目中使用。 有关当前的稳定版本,请参见 :warning: Node.js的绑定。 该库的目标是: 在语义上类似于ØMQ库,同时坚持使用JavaScript惯用语。 使用现代JavaScript和Node.js功能,例如async / await和async迭代器。 高性能。 与TypeScript(3+)完全可用。 有用的链接 。 。 注意: zeromq.org上的Node.js示例尚未反映新的API,但是对于新用户而言, 尤其是对ZeroMQ的良好介绍。 目录 例子 推拉 发布/订阅 要求/重复 打字稿 更多例子 版本4/5的兼容层 贡献 历史 安装 使用预构建的二进制文件安装ZeroMQ.js: npm install zeromq@6.0.0-beta.6 预建二进制文件 立即下载

相关推荐

计算机网络之NAT的解释与实验配置

NAT 静态NAT 动态NAT easy_ip NAT服务器映射

爱学习的JackYang的博客 1919

菜鸟玩云计算之六:Ubuntu Server 12.10 上安装 nodejs, zeromq

Ubuntu Server 12.10 上安装 python, nodejs, zeromq nodejs是一个基于google v8+javascript的服务端编程框架。对于搞云计算,用nj来做系统管理Web站点是非常合适的。理由是: a.足够简单。 b.足够快。 c.足够小巧。 d.前后端一致性。 下面是安装步骤: 1 首先确保系统安装了python, gc

mrdingjie的专栏 880

AI漫剧制作全流程零基础实操指南:从剧本到剪辑

AI漫剧是一种利用AI工具将剧本、分镜、出图、配音、剪辑整合为流水线的短视频内容形式。其技术原理基于文生图、图生图与文本转语音模型的组合,核心挑战在于角色一致性控制与分镜批量出图。这项技术大幅降低了视频制作门槛,使个人创作者无需演员和设备即可产出剧情向短内容,广泛应用于短视频平台的情景剧、玄幻、甜宠等题材。本文给出了一套零基础可照做的全流程实操方案,覆盖剧本提示词、分镜表、出图选型、配音合成与剪辑模板,帮助你快速跑通AI漫剧制作链路。

weixin_29048309的博客 536

关于nw-gyp、node-pre-gyp和node-gyp以及gyp的关系

1.gyp:谷歌出品的用于构建原生IDE项目文件的自动构建工具,处理C/C++项目2.node-gyp:简单来说就是node版的gyp,用来构建node项目文件的自动构建工具,同样处理C/C++项目3.为什么要使用node-gyp?node是跨平台的,node项目依赖包也应该是跨平台的,但是由于长久以来 linux 的二进制分发一直是巨坑,npm 为了方便干脆就直接源码分发,用户装的时候再现场编译。4.node-gyp和node-pre-gyp的关系为了方便使用,原生模块开发者将代码编译生成各个平台架构的二

记录每一次学习的成果 2772

手把手教你用Verilog在FPGA上驱动0.96寸OLED(I2C协议,含完整代码和字库)

本文详细介绍了如何使用Verilog在FPGA上通过I2C协议驱动0.96寸OLED显示屏,包含完整的硬件连接指南、I2C协议解析、Verilog代码实现及字库设计。从初始化序列到字符显示引擎,提供可立即上手的解决方案,适合嵌入式系统开发者快速实现OLED显示功能。

weixin_29655587的博客 328

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 179

node 安装zmq zeromq.node installation error Ubuntu 12.04: ' node-gyp rebuild'

gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2gyp ERR! stack     at ChildProcess.onExit (/home/hhl/.nvm/versions/node/v8.9.3/lib/node_modules/npm/node_modules/node-gyp/lib/

前端技术分享 1705

Windows环境下QGIS完整编译指南(从环境搭建到问题解决)

本文详细介绍了在Windows 11系统下编译QGIS 3.40.12版本的完整流程。主要内容包括:前期准备工作(系统要求、工具清单)、环境搭建(Visual Studio 2026、OSGeo4W、Qt Creator的安装配置)、以及详细的CMake参数设置。特别强调了依赖管理的重要性,并提供了解决常见编译错误的方案。该指南适用于GIS二次开发、QGIS功能定制和源码学习等场景,通过OSGeo4W工具简化了复杂的依赖管理过程,确保编译过程的可重复性。

LuckyHanMo的博客 1339

nodejs使用ZeroMQ进行消息通信

最近想在electron和python之间做通信,了解一些消息通信中间件,最终选定ZeroMQ进行通信(因为官网有很详细的教程) 首先创建一个node项目,打开任意文件夹后 npm init -y 安装ZeroMQ,新版可以解决很多不兼容问题,使用淘宝镜像cnpm安装成功率大点 cnpm install zeromq@6.0.0-beta.6 Push/Pull模式 新建一个producer.js // producer.js var zmq = require("zeromq"),

weixin_41929569的博客 3349

基于巴法云物联网云平台构建可视化控制网页(以控制LED为例)

本文基于巴法云物联网云平台构建可视化控制网页,实现了对LED的控制。

kevin1499的博客 4522

Epicor ERP 界面新增客制化字段操作方法

我发现国内对于epicor这个erp软件的教程非常少,所以录制一些我实际遇到的需求,整理了实现过程,提供给大家参考。

cqxianggang的专栏 413

菜鸟玩云计算之三:Ubuntu Server 12.10 安装

菜鸟玩云计算之三:Ubuntu Server 12.10 安装 开始swap分区:

云计算? 202

[ 人力资源面试篇 ] HR 面试题分析详解大集合,看完直怼面试官(二)

那么在这个系列的文章中,我们聊到 HR 面谈什么?并且总结了五十个常见的人力资源面试题,在这里分享给大家。

qq_51577576的博客 1380

菜鸟玩云计算之二:Ubuntu Server 12.10 安装

菜鸟玩云计算之二:Ubuntu Server 12.10 安装 手动分区的原则是: /boot=2GB swap=内存大小。考虑未来的扩容,可以是2倍内存大小。 /=剩余全部是 下面开始分区,先分/boot: 这样/boot分区结束。下面做swap分区。 (待续) ...

云计算? 155

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

在Ubuntu18.04搭建node环境-笔记

在Ubuntu18.04搭建node环境 1.更新apt sudo apt update 2.安装nodejs sudo apt-get install nodejs 3.输入node -v 出现版本信息 就表示安装成功了 root@VM-0-7-ubuntu:/home/ubuntu#node -v v8.10.0 4.安装npm sudo apt install npm 5.安装no...

qq_41077797的博客 1316

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机

菜鸟玩云计算之十五:在Ubuntu上创建和管理Redhat虚拟机

恒 2750

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ubuntu16.04中搭建openstack详细记录

(安装手册) http://docs.openstack.org/newton/install-guide-ubuntu/ (中文文档:) http://docs.openstack.org/zh_CN/ (词汇表:) http://docs.openstack.org/mitaka/zh_CN/install-guide-ubuntu/common/glossary.html#...

虚拟化云计算技术 1万+

用NodeJS开发云计算时代Web服务的真正技术难点

因为前一阵子做项目用NodeJS/express开发了一个测试服务(代码现已从github删除,无非就是一个查询MySQL的REST/JSON接口的Web服务实现),一些感想: (1)基于NodeJS的Web服务开发实在不要太简单,其url routing、json序列化、express中间件配置,用起来都特别方便。OpenResty的作者春哥非常鄙视Node的嵌套callback的风格

cteng的专栏 1548

菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4

Ubuntu14.04上的 qemu比RHEL6.4上的版本要新,导致在Ubuntu14.04创建的Guest(RHEL6.4)虚拟机复制到RHEL6.4HOST主机上不能运行。本文解决了这个问题。

恒 3024

马哥:linux云计算从入门到精通笔记

前言 Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。 互联网Linux运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够7×24小时为用户提供高质量的服务。运维的职责覆盖了产品从设计到发布、运行维护、变更升级及至下线的生命周期。                               ...

Spring Lee的博客 1万+

到底什么是云计算:云计算的5-3-2原理与实践

经常有人问我:“到底什么是云计算,它的核心是什么?” 自从某次的思考后,我每次都会回答:云计算的5-3-2原理,也就是具备5大核心特点,3种服务模式和2种部署方式。 一、引子 由于云计算的广泛热炒,很多东西都牵强附会地被”云“了。于是,”人云亦云“、“新瓶换旧酒”、“假大空”等各种帽子被扣在了云计算上。 各种厂商和机构也纷纷给出了自己的云计算的定义,纷纷扰扰,混乱不堪。这种情形,所有的努力...

云计算? 660

Windows开发工具环境管理:Git、Node.js、Python多版本与PATH冲突排查

Windows开发工具安装成功却无法运行,或始终调用错误版本?本文围绕Git、Node.js、Python及Codex CLI,系统讲解PowerShell命令解析、PATH环境变量、版本管理器冲突、npm脚本入口、Python install manager与虚拟环境管理。通过可复制的排查命令、Mermaid流程图、只读诊断工具和离线PATH实验,帮助开发者建立稳定、清晰、可复现的Windows开发工具链。

flyingonpine的博客 721

Node.js CLS 布局偏移检查:图片不标尺寸,页面内容跳来跳去

本文介绍一个无依赖的 Node.js 工具,用于检查网页中导致累积布局偏移(CLS)的图片和 iframe 缺失尺寸问题。通过原生 fetch 抓取页面,匹配未声明 width/height 的 img 与 iframe,快速定位布局跳动风险点。建议为所有媒体元素显式设置尺寸,提升页面稳定性与 SEO 排名。

SEO_juper的博客 202
上一篇: 一步一步学习Ubuntu之NodeJs安装篇
下一篇: Ubuntu 14.04下Redis安装及简单测试
dreamjava9213
博客等级 码龄16年 7粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值