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

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

Ubuntu Server 12.10 上安装 python, nodejs, zeromq


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 预建二进制文件 立即下载

相关推荐

Xilinx Vivado vitis IDE launch Failed \ Web installer client Obsolete 怎么办

Xilinx vitis_IDE failed Web installer client Obsolete

weixin_44820962的博客 8645

关于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

Unity游戏Google Play闪退?可能是这个隐藏设置惹的祸(附完整解决方案)

本文深度解析Unity游戏在Google Play上出现闪退的疑难问题,指出其根源可能在于Google Play后台的“应用完整性”设置与游戏原生库的冲突。文章提供了从崩溃日志分析、本地与线上版本对比测试,到调整Unity构建设置、审查第三方插件以及优化分发包配置的系统性排查与根治方案,帮助开发者彻底解决这一隐蔽问题。

weixin_29213827的博客 239

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

STM32驱动LED矩阵:IS31FL3731与查理复用技术实践

LED矩阵显示是嵌入式系统中常见的人机交互方式,其核心在于高效的驱动技术。查理复用(Charlieplexing)作为一种创新的矩阵扫描方式,通过引脚复用技术,用N个引脚驱动N²-N个LED,大幅提升了硬件资源利用率。IS31FL3731驱动芯片集成了这一技术,配合STM32F410RB微控制器的强大性能,可实现144个LED的精准控制。这种组合在艺术装置、信息展示等场景中展现出独特优势,既能呈现丰富的视觉效果,又能通过内置PWM调光实现256级亮度控制。通过I2C接口通信,开发者可以轻松实现字符显示、图像

weixin_29193359的博客 280

杰理JL703N的SDK内部MIDI 音色库功能使用教程

本文介绍了MIDI琴按键解码和MIDI文件解码的实现方法。MIDI琴解码通过audio_dec_midi_ctrl.c文件实现,MIDI文件(mfa格式)解码则使用audio_dec_midi_file.c。使用前需将音色文件存放在SD卡或内置flash中(需确保四字节对齐),并在download.c中配置路径。同时需在板级配置中将FLASH设置为16Mbit以解决编译问题。关键注意事项包括音色文件的文件夹结构对齐要求和MIDI数据流的正确配置。

qq_42014563的博客 390

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

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1078

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

nodejs是一个基于google v8+javascript的服务端编程框架。对于搞云计算,用nj来做系统管理Web站点是非常合适的。理由是: a.足够简单。 b.足够快。 c.足够小巧。 d.前后端一致性。 下面是安装步骤: 1 首先确保系统安装了python, gcc, g++,如果没有则安装: $ sudo apt-get install python $

dreamjava9213的专栏 790

【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法

1. 安装ROCm Docker支持 ■AMD GPU驱动 ■ROCM ■Docker 2. 配置Docker使用ROCm 3. 使用官方ROCm Docker镜像 4. 使用Docker CLI参数访问GPU

静谧、淡雅 688

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2576

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万+

对接金蝶云星空调用即时库存信息查询API(附JAVA实现)

这篇文章教你如何对接金蝶API并且使用JAVA调用金蝶云星空的即时库存查询API

实用的博客 2609

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

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

cteng的专栏 1548

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

云计算? 202

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

云计算? 155

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

云计算? 660

在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

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

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

恒 2750

菜鸟玩云计算之十六: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万+

Ubuntu Linux中安装WorkBuddy

使用Electron打包的桌面程序,在Linux下经常会遇到这个问题,在运行命令的后面加个。这时候有个常见的小坑,直接打开是不行的,我们可以看下他默认图标怎么启动程序的。就可以了,登录后也是正常的。我们先彻底修复一下,在desktop里面修改一下。直接通过dpkg安装即可,如果安装失败少什么依赖,可以执行。

逸鹏说道 686

Ubuntu 新建 SSH 用户并安全开启「密码登录」完整指南

在 Ubuntu 上新建一个用户(本文用示范名zhangsan),让它能通过 SSH(远程 shell)用方式登录,并且在的前提下把安全性做到位。:Ubuntu 20.04 / 22.04 / 24.04(其它 Debian 系同理)。命令默认在目标服务器上、用一个有 sudo 权限的账号执行。:本文很多地方给出「❌ 错误/不成熟写法」与「✅ 正确写法」的对照,先看清坑在哪,再照正确写法做。——它解释了「为什么很多人改了配置却不生效」,务必读懂再动手。

m0_46695127的博客 257
上一篇: 如何在IIS6,7部署ASP.NET网站
下一篇: Ubuntu下配置Nodejs,并安装express和socket.io
dreamjava9213
博客等级 码龄16年 7粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值