前言
最近无意中看到http2.0协议,突然感觉这个可以推广的话,那么对于web的性能和应用【譬如,在线实时直播】有很大的补充,所以现在来进行http/2的服务器环境搭建。
csr和key证书还有crt证书
好了,我们需要的就是csr的内容还有key的内容,要先保存下来–这个证书当然是不可信的,但是我们用来做做开发,足够了。
对了,还有申请crt文件,将csr的内容复制到:
下面,然后申请即可。
这个真的方便,好了,我们将key,csr,crt都保存下来,
为了方便起见,我保存为server.key 和 server.csr,server.crt.
nodejs安装
这里用nodejs来搭建环境,那么,当然请安装一下nodejs,我用的是nodejs4这里就不废话如何安装nodejs了。
http2模块安装
npm install http2 -g
对了,顺便提醒一下,nodejs假如自作主张很聪明地帮自己设定了代理,那么就会出现下面这种情况:
npm ERR! Error: connect ECONNREFUSED
npm ERR! at errnoException (net.js:878:11)
npm ERR! at Object.afterConnect [as oncomplete] (net.js:869:19)
npm ERR! { [Error: connect ECONNREFUSED]
npm ERR! code: 'ECONNREFUSED',
npm ERR! errno: 'ECONNREFUSED',
npm ERR! syscall: 'connect' }
npm ERR!
npm ERR! If you are behind a proxy, please make sure that the
npm ERR! 'proxy' config is set properly. See: 'npm help config'
npm ERR! System Windows_NT 6.2.9200
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nod
ejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "nodemailer"
npm ERR! cwd C:\Users\yy
npm ERR! node -v v0.10.2
npm ERR! npm -v 1.2.15
npm ERR! syscall connect
npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! stack Error: connect ECONNREFUSED
npm ERR! stack at errnoException (net.js:878:11)
npm ERR! stack at Object.afterConnect [as oncomplete] (net.js:869:19)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! C:\Users\yy\npm-debug.log
npm ERR! not ok code 0
这条错误,你的代理怎么怎么地,万恶了很久,解决其实很简单啊,npm可能是默认的proxy http://127.0.0.1.8087
$ npm config set proxy null
把代理去掉就行了
虽然成功了,但是有一些警告,这些警告是说有这些依赖找不到,于是我们手动安装这些东西吧,尝试更新一下模块,出错,尝试安装对应版本,也出错:
然后我们看清楚点,原来是body parser里面的bytes和iconv-lite版本太旧了,好了,研究一下如何升级body-parser 下面的两个子模块。
下面这篇文章可以帮到大家:
这里写链接内容
npm 安装出现 UNMET DEPENDENCY 的解决方案
Posted on 2014 年 2 月 27 日
npm install express -g
...
npm list -g
D:\Users\Ls\AppData\Roaming\npm
└─┬ express@3.4.8
├── buffer-crc32@0.2.1
├─┬ commander@1.3.2
│ └── keypress@0.1.0
├─┬ connect@2.12.0
│ ├── UNMET DEPENDENCY batch 0.5.0
│ ├── UNMET DEPENDENCY bytes 0.2.1
│ ├── UNMET DEPENDENCY multiparty 2.2.0
│ ├── UNMET DEPENDENCY negotiator 0.3.0
│ ├── UNMET DEPENDENCY pause 0.0.1
│ ├── UNMET DEPENDENCY qs 0.6.6
│ ├── UNMET DEPENDENCY raw-body 1.1.2
│ └── UNMET DEPENDENCY uid2 0.0.3
├── cookie@0.1.0
├── cookie-signature@1.0.1
├── debug@0.7.4
├── fresh@0.2.0
├── merge-descriptors@0.0.1
├── methods@0.1.0
├── mkdirp@0.3.5
├── range-parser@0.0.4
└─┬ send@0.1.4
└── mime@1.2.11
npm ERR! missing: batch@0.5.0, required by connect@2.12.0
npm ERR! missing: bytes@0.2.1, required by connect@2.12.0
npm ERR! missing: pause@0.0.1, required by connect@2.12.0
...
npm ERR! not ok code 0
今天安装一些模块的时候发现 npm install 到了一个点之后就卡住了一样等了半天一直不动,接着中断看了下出现安装出现了 UNMET DEPENDENCY 的 模块,这个时候如果重新 install 一便的话,又会重头开始,如果又碰到卡壳就很烦。所以用list 命令查看之后决定用另外一种解决方案来解决这个问题,即跑到缺失模块的目录下去安装:
D:\Users\Ls\AppData\Roaming\npm\node_modules\express\node_modules\connect>npm install uid2
...
D:\Users\Ls\AppData\Roaming\npm\node_modules\express\node_modules\connect>npm list -g
D:\Users\Ls\AppData\Roaming\npm
└─┬ express@3.4.8
├── buffer-crc32@0.2.1
├─┬ commander@1.3.2
│ └── keypress@0.1.0
├─┬ connect@2.12.0
│ ├── UNMET DEPENDENCY batch 0.5.0
│ ├── UNMET DEPENDENCY bytes 0.2.1
│ ├── UNMET DEPENDENCY multiparty 2.2.0
│ ├── UNMET DEPENDENCY negotiator 0.3.0
│ ├── UNMET DEPENDENCY pause 0.0.1
│ ├── UNMET DEPENDENCY qs 0.6.6
│ ├── UNMET DEPENDENCY raw-body 1.1.2
│ └── uid2@0.0.3
├── cookie@0.1.0
├── cookie-signature@1.0.1
├── debug@0.7.4
├── fresh@0.2.0
├── merge-descriptors@0.0.1
├── methods@0.1.0
├── mkdirp@0.3.5
├── range-parser@0.0.4
└─┬ send@0.1.4
└── mime@1.2.11
npm ERR! missing: batch@0.5.0, required by connect@2.12.0
npm ERR! missing: qs@0.6.6, required by connect@2.12.0
npm ERR! missing: bytes@0.2.1, required by connect@2.12.0
npm ERR! missing: pause@0.0.1, required by connect@2.12.0
npm ERR! missing: raw-body@1.1.2, required by connect@2.12.0
npm ERR! missing: negotiator@0.3.0, required by connect@2.12.0
npm ERR! missing: multiparty@2.2.0, required by connect@2.12.0
npm ERR! not ok code 0
看 log 发现已经解决了一个 uid2 的依赖,剩下的依次类推,在该 connect 模块下手动 install 就可以解决这些 UNMET DEPENDENCY 的问题了。(用 sublime 拼一下很快的)
我们观察一下 body parser里面的结构:
于是可以发现,body parser的node-module就是存放子模块的地方,于是我们可以这样升级里面的子模块:
直接用 npm install 模块名称@版本号 这个命令即可,之前用了那么多命令是试验一下其他命令能不能更新模块的。
还是这样–额,抱歉误导大家了,这里的路径是appData下面的。。我们需要在这里面升级。。
经过千辛万苦,终于成功安装http2了。
新建nodejs项目
新建一个nodejs项目,然后编写测试代码。好了,我用的是wbstorm.
打开webstorm,创建一个空项目
然后就会看到一个新项目–真的什么都没有的项目
上一步有没有将csr和key保存下来?我保存下来了,名字叫server.crt和server.key好了,放进项目下面,当然,也新建一个app.js作为入口文件。
那么,下一步就是写测试代码了,这就是测试代码:
//const spdy = require('spdy');--这个暂时不用管,spdy是http2的前身。
const http2=require('http2');
const path = require('path');
const fs = require('fs');
var options = {
key: fs.readFileSync('./server.key'), //读取key
cert: fs.readFileSync('./server.crt') //读取crt
};
http2.createServer(options, function(request, response) {
response.end('Hello world!');
}).listen(8080);
//var http = require("http");
//http.createServer(function(request, response) {
// console.log('request received');
// response.writeHead(200, {"Content-Type": "text/plain"});
// response.write("Hello World");
// response.end();
//}).listen(8888);
//console.log('server started');
好了,然后我们在命令行打开目录,执行命令,发现没有http2这个模块–坑爹了,一怒之下直接在目录下安装http2,不在全局安装了。
目录路径不隐藏了。。。太麻烦了。
完全收不到数据–失败。换成http1的服务器看看怎么样:
执行以后:
访问:
bug检查时间:
试了网上一些代码,还有连模块作者的example我都download试了,不过还是不行,最后看到:
node http2模块
666.更改nodejs版本。
然后,请使用https协议访问。。
https://localhost:8080/
无论是spdy还是http2,都是用https访问的。。。也是醉了。
好了,接下来要用wireshark来监控一下数据