网络程序设计无疑是nodejs + html最好用

一、nodejs的安装

1、在ubuntu上的安装

sudo apt install nodejs-legacy

sudo apt install npm

node.js 升级与版本切换——最简单的方法

https://segmentfault.com/a/1190000006869650

2、从nodejs v4版本开始已经发布了适用于嵌入式的运行环境,

我的硬件平台是cortex a5, armv7体系结构的,用最新版node-v9.9.0-linux-armv7l.tar.gz

官网https://nodejs.org/download/release

文档手册https://nodejs.org/api/

中文社区https://cnodejs.org/

3、在ARM核上的安装

1)解压安装文件
cp node-v9.9.0-linux-armv7l.tar.gz /usr/local/
cd /usr/local/
tar xvf node-v9.9.0-linux-armv7l.tar.gz

2)添加环境变量
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/node-v9.9.0-linux-armv7l/bin"
export LD_LIBRARY_PATH=/usr/local/node-v9.9.0-linux-armv7l/lib:$LD_LIBRARY_PATH

3)测试实例 http_server_test.js
var http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}).listen(8888);
console.log("nodejs start listen 8888 port!");

4、也可以自己编译源码

export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export LD=arm-linux-gnueabihf-ld
export RAINLIB=arm-linux-gnueabihf-rainlib
export AR=arm-linux-gnueabihf-ar

export LINK=arm-linux-gnueabihf-g++
./configure --prefix=/home/dong/armnodejs --dest-cpu=arm --dest-os=linux --cross-compiling --fully-static --with-arm-float-abi=hard --without-snapshot

make
make install

二、nodejs实现websocket应用

1、nodejs实现websocket的应用程序, 无论是服务端还是客户端都非常容易。

1)有WebSocket-Node这个开源库就够用了

https://github.com/theturtle32/WebSocket-Node

另外下面这个也很好用

https://npm.taobao.org/package/ws

我做的websocket client就是将WebSocket-Node应用实例加了个json数据加密处理而已。应用实例几乎就是个通用模板。

protocal.js

var tick = {
"protocolHead": "abc",
"protocolType": 0001
} var login = {
"protocolHead": "abc",
"protocolType": 0002,
"userName": "user",
"passWord": "123",
"mDeviceNumber": "65535"
} module.exports.login = login;
module.exports.tick = tick;

des3.js

var crypto = require('crypto');  

exports.des3Encrypt = function(param) {
var key = new Buffer(param.key);
var iv = new Buffer(param.iv ? param.iv : 0)
var plaintext = param.plaintext
var alg = param.alg
var autoPad = param.autoPad var cipher = crypto.createCipheriv(alg, key, iv);
cipher.setAutoPadding(autoPad)
var ciph = cipher.update(plaintext, 'utf8', 'base64');
ciph += cipher.final('base64');
return ciph; }; exports.des3Decrypt = function(param) {
var key = new Buffer(param.key);
var iv = new Buffer(param.iv ? param.iv : 0)
var plaintext = param.plaintext
var alg = param.alg
var autoPad = param.autoPad var decipher = crypto.createDecipheriv(alg, key, iv);
decipher.setAutoPadding(autoPad)
var txt = decipher.update(plaintext, 'base64', 'utf8');
txt += decipher.final('utf8');
return txt;
};

websocket_client.js

var des3 = require('./des3.js');
var proto = require('./protocal.js'); var W3CWebSocket = require('websocket').w3cwebsocket; var key_value = '0123456789abcdefghijklmn'; var client = new W3CWebSocket('ws://server_ip:port/folder', ''); function des3_decode(data){
var para = {
alg:'des-ede3',
autoPad:true,
plaintext:data,
iv:null,
key:key_value
};
var decode_str = des3.des3Decrypt(para);
return decode_str;
} function des3_encode(data){
var para = {
alg:'des-ede3',
autoPad:true,
plaintext:data,
iv:null,
key:key_qbox10
};
var encode_str = des3.des3Encrypt(para);
return encode_str;
} function recv_routine(data){
var obj = JSON.parse(des3_decode(data));
console.log("<<<<<<<<<<<<<<<<<<<<"+JSON.stringify(obj));
} function tick_routine(){
client.send(des3_encode(JSON.stringify(proto.tick)));
console.log(">>>>>>>>>>>>>>>>>>>>"+JSON.stringify(proto.tick));
} client.onerror = function() {
console.log('Connection Error');
}; client.onopen = function() {
console.log('WebSocket Client Connected'); function send() {
if (client.readyState === client.OPEN) {
client.send(des3_encode(JSON.stringify(proto.login)));
setInterval(tick_routine, 10000);
}
}
send();
}; client.onclose = function() {
console.log('Client Closed');
}; client.onmessage = function(e) {
if (typeof e.data === 'string') {
recv_routine(e.data);
}
};

2)也有c语言实现websocket,非常繁琐,像下面这样,不推荐使用。

Linux下c语言实验Websocket通讯 含客户端和服务器测试代码
http://blog.csdn.net/SGuniver_22/article/details/74273839
Linux下用C编写WebSocet服务以响应HTML5的WebSocket请求
http://blog.csdn.net/xxdddail/article/details/19070149

3) addon c++编译

nodejs的C/C++拓展,将c/c++源码编译成js模板库
node-gyp configure
node-gyp build

交叉编译

export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export LD=arm-linux-gnueabihf-ld
export RAINLIB=arm-linux-gnueabihf-rainlib
export AR=arm-linux-gnueabihf-ar
export LINK=arm-linux-gnueabihf-g++
node-gyp configure --arch=arm
node-gyp build --arch=arm

4) nodejs库安装,编译

npm rebuild

npm init
npm install -save websocket
npm install ref-array
npm install -save ref-array
npm install -save ref-struct

交叉编译

npm init
npm install -save websocket --arch=arm
npm install ref-array --arch=arm

npm rebuild

5)nodejs源码交叉编译

node-ffi交叉编译

cd node-ffi
node-gyp --arch arm configure build

6)整理的交叉编译环境变量设置脚本

#!/bin/bash
export HOST=arm-linux-gnueabihf
export CPP="${HOST}-gcc -E"
export STRIP="${HOST}-strip"
export OBJCOPY="${HOST}-objcopy"
export AR="${HOST}-ar"
export RANLIB="${HOST}-ranlib"
export LD="${HOST}-ld"
export OBJDUMP="${HOST}-objdump"
export CC="${HOST}-gcc"
export CXX="${HOST}-g++"
export NM="${HOST}-nm"
export AS="${HOST}-as"

2、如果设计的是websocket服务器,websocket-bench用来做websocket的压力测试非常方便。

参考文献

1)WebSocket学习笔记——无痛入门

https://blog.csdn.net/xukai871105/article/details/23301213

2) Nodejs实现websocket的4种方式

https://blog.csdn.net/zhangyuan19880606/article/details/51517944

基于nodejs的websocket通信程序设计的更多相关文章

  1. nodejs建立websocket通信

    依赖模块 nodejs-websocket 服务端 const ws = require('nodejs-websocket'); console.log('开始建立连接...'); const se ...

  2. Nodejs实现WebSocket通信demo

    一.创建websocket.js文件 步骤: 1.创建websocket.js文件,复制如下代码: 2.安装nodejs-websocket依赖: 3.该文件夹下命令行执行 node websocke ...

  3. 基于golang的websocket通信实现

    代码: https://gitee.com/knox_xzk/websocket

  4. 基于 nodejs 的 webSockt (socket.io)

    基于 nodejs 的 webSockt (socket.io) 理解 本文的业务基础是在基于 nodejs 的 socket.io 的直播间聊天室(IM)应用来的. 项目中具体的 框架如下 expr ...

  5. 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...

  6. 基于nodejs+webSocket的聊天室(实现:加入聊天室、退出聊天室、在线人数、在线列表、发送信息、接收信息)

    1  安装 socket.io模块 npm install "socket.io": "latest" 2 app.js相关 ws = require('soc ...

  7. nodejs+mongoose+websocket搭建xxx聊天室

    简介 本文是由nodejs+mongoose+websocket打造的一个即时聊天系统:本来打算开发一个类似于网页QQ类似功能的聊天系统,但是目前只是开发了一个模块功能 --- 类似群聊的,即一对多的 ...

  8. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  9. 转-基于NodeJS的14款Web框架

    基于NodeJS的14款Web框架 2014-10-16 23:28 作者: NodeJSNet 来源: 本站 浏览: 1,399 次阅读 我要评论暂无评论 字号: 大 中 小 摘要: 在几年的时间里 ...

随机推荐

  1. 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。

    客户端调用WCF的时候报上面的错误,WCF只能序列化基础的数据类型,不能直接序列化SqlParameter类型,需要使用自定义类,然后在WCF服务端转换的方式解决: 自定义类代码如下: using S ...

  2. 常用cmd

    net use 查询相应的共享文件 control userpasswords2--修改计算机的网络凭证 删除计算机记录的网络共享凭证 重启网络

  3. ResultSet是结果集对象

    ResultSet是结果集对象 DriverManager管理一组驱动程序 PreparedStatement预编译的,用来发送和执行SQL语句的

  4. $ -----JavaScript 中美元符号 $ 的作用

    JavaScript 中美元符号 $ 是什么 1.首先可以用来表示变量,比如变量 var s='asdsd'或var $s='asdasd'; 2.在正则表达式中,它可以匹配结尾:/sa$/.test ...

  5. Javascript特效代码大全(420个)(转)

    转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习  ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...

  6. javascript -- 阻止默认事件 阻止事件冒泡

    1. event.preventDefault();  -- 阻止元素的默认事件.注:a元素的点击跳转的默认事件 , button,radio等表单元素的默认事件 , div 元素没有默认事件 例: ...

  7. Java凝视模板

     设置凝视模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是全部需设置凝 ...

  8. 曲线学习PyQt5方案一

    PyQt5官方网站没直接给出API,这个很操蛋啊. PtQt4官方网站有完整的API,C++版本的Qt5也能找到完整的API资料.由于Qt5的C++和Python3的类和函数实现应该是一致的,所以可以 ...

  9. List<T>转DataTable

    /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list"> ...

  10. 360破解大赛crackme分析--之3DES解密附加数据

    具体的分析这里有.本人仅仅是对这里面有趣的算法进行了一些学习 分析链接 这次是逆向的使用3DES解密的过程中的内容: 使用微软的crypt库 使用3DES解密程序中的附加数据 代码: VOID enc ...