服务器相关概念
服务器与客户端
服务器是提供网络服务的机器,通过安装特殊的软件(或者是运行某段特殊的代码)来提供服务。
服务器 = 电脑 + 能给其它电脑/设备提供服务的软件
客户端与服务器:提供服务的是服务器,享受服务的是客户端
服务器的类型
根据服务不同,服务器的类型也不同:
- web服务器。安装apache, tomcat, iis, 或者在nodejs环境写代码 来提供:图片浏览,新闻浏览....等服务的服务器。
- ftp服务器。安装serv-U软件,为其它电脑提供文件下载,共享服务。
- 数据库服务器。安装mysql软件,为其它电脑提供数据库服务。
....
web服务器:
- 用户通过浏览器来享受web服务器提供的服务
- 我们用url地址来访问某个web服务器上的资源
- 浏览器端发起请求,web服务器收到请求后,响应这个请求,并将处理结果返回给浏览器
- 浏览器端与web服务器是通过http(或者是https)协议来进行请求和响应
ip地址
全称:I
nternet P
rotocol Address。
作用:标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址。要访问某个电脑上的资源,先要找到它的ip。
分类:ipV4 ipV6 (教育部办公厅关于贯彻落实《推进互联网协议第六版(IPv6)规模部署行动计划》的通知_部门政务_中国政府网)
格式:[0-255].[0-255].[0-255].[0-255]
即为四个 0-255 的数字组成(以ip4为例)。在同一个网络中,计算机的IP是不允许相同的,都是唯一的。
127.0.0.1 特指本机ip地址。
这个 百度一下,你就知道 会指向哪里?
域名
域名:ip地址的别名,由于ip地址不好记忆,我就给它们取个好记的别名。localhost这个域名特指127.0.0.1这个地址。
域名解析系统:把域名翻译成Ip地址的系统。
端口
一个IP地址的端口可以有65536个,范围是从[0,65535])。不同的端口被不同的软件占用,以提供不同的服务。
一台电脑可以通过安装多个服务器端软件来提供服务,比如Web服务、FTP服务、SMTP服务等。显然,仅仅通过ip地址是无法区分不同的服务的,这里就需要用到 “IP地址+端口号”来区分不同的服务
。
理解
如果理解IP地址(一台服务器)是一栋大商场,端口就是商场中的商铺的编号。
如果理解IP地址(一台服务器)是公司的前台电话,端口就是公司中各个部门的分机号。
- 服务器要提供服务必须要通过指定的端口
- 服务器与客户端都需要通过端口要进行通信
- 端口是可以编程分配
- 有一些端口号是被预定了的。
- http: 80
- https:443
- mysql:3306
通过netstat -a -n -o
查看端口使用情况
协议
制定客户端与服务器之间的通讯规则。不同的协议的作用也不同。
http协议:
- HTTP(HyperText Transfer Protocol) 超文本传输协议。
- 协议双方: 浏览器与web服务器
- 请求由浏览器发起的
- HTTP 协议中明确规定了
请求数据
和响应数据
的格式(报文)
-
- 浏览器 请求 资源 要遵守 http 协议: 请求报文(请求行,请求头,请求体)
- 服务器 返回 资源 要遵守 http 协议: 响应报文(响应行,响应头,响应体)
用http 模块写一个简单的web服务器
自己完成的网页,如果让其他人能够访问?
目标
用http模块写一个简单的服务器,让同学来访问本机的服务
要点
- 引入nodejs中的核心模块:http
- 使用createServer来创建服务
- 使用listen方法来启动服务
操作
有三步:
- 1. 手写代码,实现服务器功能
- 2. 运行代码,启动服务
- 3. 访问服务,测试功能
第一步:新建一个文件,名为 d:/src/01http.js
( 文件名及路径名可以自行设置,建议均不使用中文字符), 内容如下
// 1. 引入http模块 const http = require('http'); // 2. 创建服务 const server = http.createServer(function(req, res) { console.log('有人来访问了') // 向客户端发送内容,并结束本次响应 res.end('hello world'); }); // 3. 启动服务 server.listen(8081, function() { console.log('服务器启动成功,请在http://localhost:8081中访问....'); });
第二步:运行js代码,启动服务。
在小黑窗中进入到01http.js所在的目录,键入命令 node 01http.js
,此时会弹出一个小黑窗,不要关。
第三步:测试功能
打开一个浏览器页面,输入地址:http://localhost:8081
,观察效果:
- 浏览器中的效果
- 小黑窗中的效果
停止服务:ctrl + c
拓展
共享让同学来访问
把localhost改成你自己电脑的ip地址,例如:http://192.xxx.xxx.xxx:8081
,再把这个路径发你的同学(同一个局域网)来访问。
如果不能被其他同学访问,有可能你需要手动关闭你自己计算机的防火墙。
工作原理
使用http模块在本机上创建一个虚拟服务器,它来接收浏览器的请求,并给出响应。
注意:
- 小黑窗不要关,它就是服务器
- 服务器本身不会有主动行为(小黑窗看起来没有任何变化),它在时刻等待客户端的访问
- 不要用鼠标选中小黑窗的内容,会导致程序假死
- 修改代码后要重启
-
- 更改res.end()的内容,
重启
后,再次观察。 - 重启服务:就是重新运行程序(按下向上的箭头,再回车)。
- 更改res.end()的内容,
小结
- node中手写web服务器要使用 _______ 模块
- 基本的三步是 ______, ______, _______
- 如何停止服务?
- 修改服务器代码之后,是否要重新重启服务? 如何重启?
代码解析-理解请求和响应
代码解析
- 引入核心模块,得到的http是一个对象。
- http.createServer方法创建一个http服务。参数是一个回调函数:当有http请求进来时,它会自动被调用。
请求一次,它就被调用一次
。
-
- 第一个参数:
客户端的请求
。 - 第二个参数:
设置对本次请求的响应
。
- 第一个参数:
-
-
- res.end() :设置响应体,结束请求。
-
- server.listen() 用来监听端口。
-
- 格式:server.listen(端口号,[回调函数])。回调是可选的。
- 说明:
-
-
- 如果监听成功,则回调函数会执行一次。
- 如果不成功(例如端口被占用),会报错。
-
理解请求和响应
请求
当web服务器就绪之后,如果没有客户端来访问它,它也是不会有任何效果的。也就是说回调函数不会执行。
而每一次的请求,都会导致回调函数要执行一次。
响应
通过res.end来设置响应的内容,res.end()的格式只是能是buffer或者是String