基于node的websocket学习笔记一:基础概念和第一个websocket应用demo示例
来源:互联网 发布:大秦帝国之裂变知乎 编辑:程序博客网 时间:2024/05/13 02:34
一、基本概念
首先要知道什么是几个常用的互联网传输协议:http、https、tcp、udp
http:超文本传输协议(HyperText Transfer Protocol)是一种无状态协议,就是说客户端发送一次请求,服务器端接收请求,经过处理返回给客户端信息,然后客户端和服务器端的链接就断开了。
HTTPS:(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
优点: 协议较成熟,应用广泛、基于TCP/IP,拥有TCP优点、研发成本很低,开发快速、开源软件较多,nginx,apache,tomact等
缺点: 无状态无连接、只有PULL模式,不支持PUSH、数据报文较大
特性: 基于TCP/IP应用层协议、无状态,无连接、支持C/S模式、适用于文本传输
TCP:(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂。建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
优点: 可靠性 、全双工协议、开源支持多、应用较广泛、面向连接、研发成本低、报文内容不限制(IP层自动分包,重传,不大于1452bytes)缺点: 操作系统:较耗内存,支持连接数有限、设计:协议较复杂,自定义应用层协议、网络:网络差情况下延迟较高、传输:效率低于UDP协议特性: 面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、适用于二进制传输
UDP:UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
优点: 操作系统:并发高,内存消耗较低、传输:效率高,网络延迟低、传输模型简单,研发成本低
缺点: 协议不可靠、单向协议、开源支持少、报文内容有限,不能大于1464bytes、设计:协议设计较复杂、网络:网络差,而且丢数据报文
特性:无连接,不可靠,基于IP协议层,OSI参考模型位于传输层,最大努力交付,适用于二进制传输
webSocket:WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。
优点:协议较成熟、基于TCP/IP,拥有TCP优点、数据报文较小,包头非常小、面向连接,有状态协议、开源较多,开发较快
缺点:没发现啥缺点
特性:有状态,面向连接、数据报头较小、适用于WEB3.0,以及其他即时联网通讯
对于通信协议选择方面:
大多数互联网web网页项目,都是选择的http/https协议。
实时性对战较高的互联网游戏,聊天程序,异步通知等应用,大多数都是选择websocket,其次是TCP协议。
局域网对战,赛车等大量数据交互,要求传输速度快,并发量高的,直接上UDP协议。
二、一个最基础的node服务websocket示例
1、html代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>webSocet</title></head><body><h1>Echo Test</h1><input type="text" id="sendTxt"><button id="sendBtn">发送</button><div id="recv"></div><script> //建立连接 let webSocket = new WebSocket('ws://localhost:8001/'); //开启连接 webSocket.onopen = function () { console.log('webSocket open'); document.getElementById('recv').innerHTML = 'Connected'; }; //关闭连接 webSocket.onclose = function () { console.log('webSocket close'); }; //拿到返回 webSocket.onmessage = function (e) { console.log(e.data); document.getElementById('recv').innerHTML = e.data; }; //发送信息 document.getElementById('sendBtn').onclick = function () { var text = document.getElementById('sendTxt').value; webSocket.send(text); };</script></body></html>
2、建立node socket服务
首先介绍一个node的一个websocket服务插件:nodejs-websocket
首先安装模块npm install nodejs-websocket
接下新建一个server.js的文件,写入一下代码来实现socket逻辑,代码如下:
var ws = require("nodejs-websocket")// Scream server example: "hi" -> "HI!!!"var server = ws.createServer(function (conn) { console.log("New connection"); //获取连接信息 conn.on("text", function (str) { console.log("Received "+str); conn.sendText(str.toUpperCase()+"!!!") }); //断开连接的回调 conn.on("close", function (code, reason) { console.log("Connection closed") }) //处理错误事件信息 conn.on('error',function(err){ console.log('throw : err'); console.log(err); })}).listen(8001);console.log('webSocket server listening on port 8001');这里需要一个错误信息处理,因为如果页面突然关闭,在链接还没有关闭的情况下,我们的服务会抛出异常的。
启动服务后可以直接访问页面。我们的第一个websocket 示例完成。
- 基于node的websocket学习笔记一:基础概念和第一个websocket应用demo示例
- 基于node的webSocket应用
- 基于node的websocket学习笔记三:scoket.io基础与利用scoket.io构建聊天程序示例
- 基于Tomcat7的HTML5 WebSocket 应用示例
- 基于Tomcat7的HTML5 WebSocket 应用示例
- 基于Tomcat7的HTML5 WebSocket 应用示例
- 基于Node.js + socket.io实现WebSocket的聊天DEMO
- WebSocket学习笔记一
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- HTML5 WebSocket DEMO示例
- 第一篇文章:WebSocket的概念和实战(JAVA版)
- websocket基础:websocket使用示例及学习资料
- WebSocket详解(一)基础概念
- 基于Node.js服务器的WebSocket Video
- 基于node-websocket-server的简易聊天工具
- 一个基于netty的websocket聊天demo
- 基于构建实时WEb应用的HTML5 WebSocket协议<一>
- HTML5 WebSocket 应用示例
- Retrofit+RxJava+Fresco+MVP
- 深度学习与计算机视觉笔记(个人笔记而已,非系统)
- VS2010 VS2012 如何连接Oracle 11g数据库
- sql server 获取每一个类别中值最大的一条数据
- Golang 文件操作
- 基于node的websocket学习笔记一:基础概念和第一个websocket应用demo示例
- 专家:早着呢!有意识的人工智能兴起还需要几十年 | 观点
- tensorflow学习笔记--tf.one_hot
- Eclipse问题Access restriction: The type 'SunJCE' is not API 解决
- 数据结构第五周项目2--建立链栈算法库
- 2017.11.3笔记
- Sort with Swap(0, i)
- imu姿态融合基础
- 难点笔记:udacity计算机导论- 37使用数字查找