乱七八糟 Nodejs 系列一:试水
看Nodejs比较舒服的人,个人认为主要是:
- 以前是后端,转成前端的人;
- 前端巨牛的人;
- 后端巨牛的人;
- 巨牛的人。。。
当然还有我这种,脑抽不止的人~~
不过学习的过程中发现,如果不是上来就用express来写服务器,老实从hello world一步一步来,会加深对服务器工作原理的认识。
安装配置环境,有很多文章了,各自搞定吧;nodejs版的hello world满互联网都是,这里稍微改造一下。
1: var http = require('http');
2: var server = http.createServer(function(req,res){
3: console.log(req.headers);
4: console.log(req.url);
5: console.log(req.method);
6: console.log('=============');
7: res.end("hello world");
8: });
9: server.listen(3000);
其实上面的代码也就多了点控制台输出,启动以后。在浏览器中输入localhost:3000 (本文只在chrome下进行了调试运行,IE有可能要加http://),可以看到控制台输出

在chrome下,按F12,在network一栏下可以看到(需要刷新页面)下图

从这里就能窥得一下http协议的内容。
浏览器发送请求,经过路由到达服务器后,其实就是这些字符串,然后解析这些字符串,知道浏览器想要什么,然后发过去就行了,这就是核心流程。
所以web服务器从功能上讲,没什么很神秘的东西,就是
1.起一个socket服务器
2.根据http协议解析字符串,构造诸如request和response这样的对象供后面开发使用
3.线程管理(Nodejs和浏览器javascript一样,都是单线程,所以和传统的不一样,这个后面有机会再说),链接管理之类的活动
4.做一些像缓存之类的优化
5.把结果发回浏览器
说完这些,我深刻的认识到,说着永远比做着简单~~。
Nodejs原生的,并没有把服务器功能做的很彻底,只是能来回发字符串,初步构造了request和response。。。
线程管理不用操心,进一步地解析字符串、处理响应等东西的还是需要我们。。使用别人已经写好的模块,然后实现自己的逻辑.
最后,可以小试一下,把上面代码的第7行变成下面两行代码
res.setHeader('holly','fuck');
res.end("hello world");
然后去network标签下看一下吧(希望浏览器不要生气。。)
乱七八糟 Nodejs 系列一:试水的更多相关文章
- 乱七八糟Nodejs系列二:线程模型
上一篇中说了这样一句话:Nodejs和浏览器javascript一样,都是单线程,所以和传统的不一样,这个后面有机会再说.挖了坑就得填,哎. 1.一个例子 来看一个例子,这个例子来自async jav ...
- NodeJS系列-部署
NodeJS系列-部署 NodeJS我就不介绍了,被标题吸引进来的人可以看这个链接,了解NodeJS.下来就开始关于NodeJS开发的指南. NodeJS可以部署的平台有Windows,Unix,iO ...
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- NodeJS系列~目录
回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...
- 大众点评试水O2O新模式:实体店试穿,扫描二维码付款 现场取货
在餐饮美食行业取得不错的成绩之后,大众点评将触角延伸到了线下的传统商铺,开始涉足线下商品的 O2O 团购.和传统的线上下单,线下消费的 O2O 模式不同.大众点评的 O2O 团购用户,可在店内试穿后通 ...
- Json.Net6.0入门学习试水篇
原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...
- 第一回:Scrapy的试水
前言:今天算是见到Scrapy的第二天,之前只是偶尔查了查,对于这个框架的各种解释,我-----都-----看------不------懂----,没办法,见面就是刚. 目的:如题,试水 目标:< ...
- CSharpGL(49)试水OpenGL软实现
CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...
- UITableView(自定义cell)试水心得
初次试水自定义cell的UITableView 实现目标 最终实现结果 界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做table ...
随机推荐
- DEVICE_OBJECT结构参数
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size ...
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutab ...
- 如何使用Reaver-PJ-Wi-Fi网络的WPA密码
在正式开始之前,我还是要不厌其烦强调一下:知识就是力量,但是拥有力量不代表着可以为所欲为.触犯法律.同样,骑白马的不一定是王子,会开锁的也不一定是小偷.本文只是关于某些技术的实验与验证,只适用于学习. ...
- SQLiteDatabase里面的简单操作数据库的方法
1.使用insert方法插入记录SQLiteDatabase的insert方法的签名为long insert(String table,String nullColumnHack,ContentVal ...
- Android中的一些小知识
android中开发常用快捷键alt+/ 自动补全ctrl+1 有问题提示生成接收的参数 ctrl+L 在按2 注释// 注释 ctrl+//**/ 多行注释 ctrl+shift+/ android ...
- HDU 5506 - BestCoder Round #60 - GT and set
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1003 题意 : 给N集 ...
- git与svn对比
git 与 svn 对比 git的使用不需要联机 SVN集中式版本控制:每个人的版本都是提交到服务器,服务器坏了就雪崩.git分布式版本控制: 安全,每人本地有个版本库,每个人都可以充当‘服务器 它 ...
- Sequence(组合数学,集合不同元素的个数)
Sequence [组合数学] 时间限制: 3 Sec 内存限制: 128 MB 提交: 138 解决: 52 [提交][状态][讨论版] 题目描述 在某个夜黑月高的晚上,!!!,原谅我编不下去了 ...
- JS中事件代理与委托
在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么 ...
- php中定界符<<<的用法
定界符给字符串定界的方法使用定界符语法(“<<<”).应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串. 结束标识符必须从行的第一列开 ...