ndoejs搭建http2.0服务器--菜鸟级教程【草稿试验版】

来源:互联网 发布:cms 系统 编辑:程序博客网 时间:2024/06/04 00:34

前言

最近无意中看到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 ECONNREFUSEDnpm 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 thenpm ERR! 'proxy' config is set properly.  See: 'npm help config'npm ERR! System Windows_NT 6.2.9200npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "nodemailer"npm ERR! cwd C:\Users\yynpm ERR! node -v v0.10.2npm ERR! npm -v 1.2.15npm ERR! syscall connectnpm ERR! code ECONNREFUSEDnpm ERR! errno ECONNREFUSEDnpm ERR! stack Error: connect ECONNREFUSEDnpm 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.lognpm 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 2014227 日npm install express -g...npm list -gD:\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.11npm ERR! missing: batch@0.5.0, required by connect@2.12.0npm ERR! missing: bytes@0.2.1, required by connect@2.12.0npm 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 -gD:\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.11npm ERR! missing: batch@0.5.0, required by connect@2.12.0npm ERR! missing: qs@0.6.6, required by connect@2.12.0npm ERR! missing: bytes@0.2.1, required by connect@2.12.0npm ERR! missing: pause@0.0.1, required by connect@2.12.0npm ERR! missing: raw-body@1.1.2, required by connect@2.12.0npm ERR! missing: negotiator@0.3.0, required by connect@2.12.0npm ERR! missing: multiparty@2.2.0, required by connect@2.12.0npm ERR! not ok code 0log 发现已经解决了一个 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来监控一下数据

1 0