cordova

1 安装命令

1
2
3
4
5
npm install -g cordova
# 跟新
sudo npm update -g cordova
# 查看最新版本
npm info cordova version

2 创建项目

1
cordova create <path>

3 添加支持平台

1
2
3
4
5
6
7
8
9
10
# 查看可以添加的平台
cordova platform

# 添加一个平台
cordova platform add <platform name>

# 查看已经添加的平台
cordova platform ls
# 查看需要的环境
cordova requirements

4 跑起来

1
2
3
4
5
6
7
cordova run <platform name>

# 注意给项目中脚本文件的执行权限

# 查看连接的设备
# --emulator 模拟器
cordova run --list

5 插件

1
2
3
4
5
6
7
8
#添加
cordova plugin add cordova-plugin-splashscreen
#删除
cordova plugin remove cordova-plugin-splashscreen
#查找
cordova plugin search camera
#查看
cordova plugin ls

适配iPhoneX

1
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, viewport-fit=cover">

nodejs

npm

命令

1
2
3
4
5
# 保存到当前项目
npm install -save koajs
# 全局命令
npm install -g koajs
# update|uninstall|list|search|init

设置某一次安装源

1
npm install -g npm --registry=https://registry.npm.taobao.org

安装cnpm

1
npm install --registry=http://r.cnpmjs.org -g cnpm

更新最新版本nodejs

1
2
3
4
sudo npm install -g n
n latest
# n 8.9 更新到8.9版本
# n rm 8.9 删除指定nodejs版本

nodejs chrome调试工具 node-inspector

1
2
3
4
5
6
7
8
9
10
11
#安装

npm install -g node-inspector

#启动app

node --debug=12345 index.js

#新命令行窗口开启调试

node-inspector --web-port 4000 --debug-port 12345

子进程

1
2
3
4
5
6
7
let cp=require('child_process')
let curdir = '/opt/do/hexo'
let cmd1 = `cd ${curdir};`
let cmd2 = `git pull;`
cp.exec(cmd1 + cmd2, function(err,stdout){
console.log(stdout)
})

socket.io

参考

https://socket.io/docs
https://www.jianshu.com/p/a3e06ec1a3a0

Socket.IO不是WebSocket实现。尽管Socket.IO确实在可能的情况下使用WebSocket作为传输,但它在每个数据包中添加了一些元数据:需要消息确认时的数据包类型、命名空间和数据包id。这就是为什么WebSocket客户端无法成功连接到Socket.IO服务器,而Socket.IO客户端也无法连接到WebSocket服务器。[请参阅此处的协议规范](https://github.com/socketio/socket.io-protocol)。

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
io.on('connection', function(socket){
// 发给这单个socket
socket.emit('request', /* */);

// 发给所有人,除了自己
socket.broadcast.emit('llc connected');

// 发送给全部已连接的socket
io.emit('broadcast', /* */);

// 监听掉线
socket.on('disconnect', function () {
io.emit('user disconnected');
});

});

// namespace
var chat = io
.of('/chat')
.on('connection', function (socket) {
socket.emit('a message', {
that: 'only',
'/chat': 'will get'
});
chat.emit('a message', {
everyone: 'in',
'/chat': 'will get'
});
});

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var socket = io();
// 监听消息
socket.on('request', (msg)=>{

})

// 监听连接上了服务器
socket.on('connect', function () {
socket.emit('ferret', 'tobi', 'woot', function (data) {
console.log(data);
});
});

// 发送消息
socket.emit('reply', {a:1})

// namespace chat
var chat = io.connect('http://localhost/chat')

webrtc

参考
ice服务器 coturn
https://github.com/coturn/coturn

1
2
3
turnserver -o -a -f -v --mobility -m 10 --max-bps=100000 --min-port=32355 --max-port=65535 --user=ling:ling1234 --user=ling2:ling1234 -r demo

turnserver -o -a -f -user=llc:123123 -r demo
1
2
3
4
5
6
7
8
9
10
11
12
listening-port=3478
external-ip=47.89.19.250
user=llc:123123
realm=ice.doee.cc

cert=/etc/letsencrypt/live/ice.doee.cc/fullchain.pem
pkey=/etc/letsencrypt/live/ice.doee.cc/privkey.pem

cli-password=123xyz

IceServer turnIceServer = new IceServer("turn:47.89.19.250:3478","llc","123123");
IceServer stunIceServer = new IceServer("stun:47.89.19.250:19302","","");

ice 测试
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

webrtc 资料
https://webrtc.github.io/samples/

iOS
https://cocoapods.org/pods/GoogleWebRTC