【Node】---- 服务器连接
1、在浏览器中输入域名后发生的事
- 输入域名
- DNS域名解价(将域名解析为IP地址)
- 找到相对应的服务器
- TCP的三次握手(验证身体信息)
- 找到相对应的资源库
- 返回相对应的资源
- 对所有文件进行解析
- 将解析完华的页面返回客户端
- 关闭面时进行TCP四次挥手
2、socket
(1)概念:网络上的两个程序通过一个双向的通信连续实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket),socket本质是编程接口API,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,即socket编程接口;
--- HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
(2)socket的使用过程:服务端初始化socket,再与端口绑定,对端口进行监听(listen),调用accept阻塞,等待客户连接;客个端初始化一个socket,并连接服务器(connect),客户端发送数据清求,服务器接收并处理清求,再将数据回在给客个端,客户端读取数据,最后关闭连接,一次交互结束。
(3)socket的使用场景
- 聊天室、多人聊天
- 实时性比较高的消息推送
- 客户端与服务端之间通信
3、聊天室逻辑
net模块:net所创建的服务器能持久储存数据,http只能暂时存储。
(1)服务器
- 通过”connection“事件,建立与每个客户端的连接,并将每个客户端添加到数组中
- 通过”data“事件,接收客户端信息
- 通过数组的遍历,将消息发给每个客户端
- 通过id,当客户端断开消息时,将其移除数组
(2)客户端
- 通打new net.Socket() 创建客户端
- 通过readline模块在终端进行文件读写
- 通过setEncoding("utf8");将buffer文件转为字符串
- 通过"connect"方法连接服务器,参数为端口号、IP地址
- 通过"data"事件,接收服务器的数据
- 通过"line"事件,在终端读写文件
4、WebSocket:允许服务器主动向客户端推送数据,只需完成一次握手,两者便可以创建持久性的通接,并进行双向数据传输(html5新增的通讯协议)
5、Socket.io:将webSocket和轮询封装成一套API,屏蔽了细节差异和兼容性问题,实现了跨浏览器/跨设备进行双向数据通信。
6、单页面与多页面开发的区别
(1)单页面开发:SPA,只有一张web页面的应用,由一个初始页面和多个页面模块组成,单页面跳转仅刷新局部资源,公共资源(js、css)仅需加载一次。
- 页面跳转:使用js中的append/remove或show/hide的方式进行页面内客的更换
- 数据传递:可通过全局变量或参数传递,进行相关数据交互
- 优势:户体验较好,页面切换的数据传递、页面切换动画都有较大的操作空间
(2)多页面开发:MPA,多页面跳转需刷新所有资源,每个公共资源需选择性重新加载。
- 页面跳转:便用windoe.location.href进行页面跳转
- 数据传递:通过路径携带数据传递的方式,或localSrorage、cookie等存储方式
- 优势:适用于页面跳转较少,数据传递较少的顶月开发
7、非持久性连接与持久性连接
(1)非持久性连接:服务器每发送一个对象后,相关的TCP连接就被关闭,每个TCP连接只能传送一个请求消息和响应消息;
(2)持久性连接:服务器在发出响应后保持TCP连续打开着,同一客户/服务器之间的后续请求和响应可以通过这个连接传递;