js--webSocket入门

Websocket

1.websocket是什么?

WebSocket是为解决客户端与服务端实时通信而产生的技术。其本质是先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接,

此后服务端与客户端通过此TCP连接进行实时通信。

2.websocket的优点

以前我们实现推送技术,用的都是轮询,在特点的时间间隔有浏览器自动发出请求,将服务器的消息主动的拉回来,在这种情况下,我们需要不断的向服务器 发送请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。会占用大量的带宽和服务器资源。

WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。在建立连接之后,服务器可以主动传送数据给客户端。

此外,服务器与客户端之间交换的标头信息很小。

WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;

关于ajax,comet,websocket的详细介绍,和websocket报文的介绍,大家可以参看http://www.shaoqun.com/a/54588.aspx  网页设计]Ajax、Comet与Websocket,

我如果以后有时间,也会写出来的

3.如何使用websocket

客户端

在支持WebSocket的浏览器中,在创建socket之后。可以通过onopen,onmessage,onclose即onerror四个事件实现对socket进行响应

一个简单是示例

var ws = new WebSocket(“ws://localhost:8080”);

ws.onopen = function(){  console.log(“open”);ws.send(“hello”);};ws.onmessage = function(evt){console.log(evt.data)};ws.onclose = function(evt){console.log(“WebSocketClosed!”);};ws.onerror = function(evt){console.log(“WebSocketError!”);};

 

1.var ws = new WebSocket(“ws://localhost:8080”);

申请一个WebSocket对象,参数是需要连接的服务器端的地址,同http协议使用http://开头一样,WebSocket协议的URL使用ws://开头,另外安全的WebSocket协议使用wss://开头。

ws.send(“hello”);
用于叫消息发送到服务端
2.ws.onopen = function() { console.log(“open”)};

当websocket创建成功时,即会触发onopen事件
3.ws.onmessage = function(evt) { console.log(evt.data) };
当客户端收到服务端发来的消息时,会触发onmessage事件,参数evt.data中包含server传输过来的数据
4.ws.onclose = function(evt) { console.log(“WebSocketClosed!”); };

当客户端收到服务端发送的关闭连接的请求时,触发onclose事件
5.ws.onerror = function(evt) { console.log(“WebSocketError!”); };
如果出现连接,处理,接收,发送数据失败的时候就会触发onerror事件
我们可以看出所有的操作都是采用事件的方式触发的,这样就不会阻塞UI,使得UI有更快的响应时间,得到更好的用户体验。

 

转 https://www.cnblogs.com/lxtblogs/p/4947898.html

 

转载于:https://www.cnblogs.com/fps2tao/p/7875452.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js继承

person.js module.exports function(){   this.name "person";   this.sleep function(){     console.log("sleep in the night");   }   this.eat function(){     console.log(eat food);   }} student.js var util require(&qu…

研究死锁–第5部分:使用显式锁定

在我的上一个博客中,我研究了使用Java的传统synchronized关键字和锁排序来修复破碎的,死锁的余额转移示例代码。 但是,有一种替代方法称为显式锁定。 这里,将锁定机制称为显式而非隐式的想法是, 显式表示它不是Java语…

mysql 经典入门教程_MySQL 经典入门教程

MySQL 经典入门教程1 定义数据库中的表:一行叫一条记录。每一列叫一个属性,或一个字段。主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录外键:表中的某个字段的值为另一张表…

druid连接池初始化慢_7、SpringBoot -连接池(Durid)

一导入相关核心包<dependencies>二 在application.ymlspring三、配置Druid Datasource(可选)Configuration五、监控访问 http://localhost:8080/druid&#xff0c; 使用上面配置的账号密码。四、自动配置原理源代码Configuration说明DataSourceProperties 配置相关 首先找…

负载均衡与反向代理

如果用域名 映射多了Ip &#xff1b; 外网应该用来实现 GSLB 1 轮询pstream nginxDemo { server 127.0.0.1:8081; server 127.0.0.1:8082; } 最少链接web请求会被转发到连接数最少的服务器上。 upstream nginxDemo { least_conn; server 127.0.…

使用工厂方法模式设计最佳实践

在前面的“设计模式”示例中&#xff0c;我们解释了当今常用的“工厂”模式。 在本节中&#xff0c;我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义&#xff1a; Factory方法模式提供了一种用于创建对象的方法&#xff0c;但是将对象创建委托…

偏导数

引入 一元函数导数&#xff1a; 在一元函数中&#xff0c;我们已经知道导数就是函数的变化率&#xff08;对于一个一元函数&#xff0c;x增大了多少&#xff0c;y增大了多少&#xff0c;这个就是变化率&#xff09;。对于二元函数我们同样要研究它的“变化率”。在xOy平面内&am…

qt绘制一圈圆_Qt绘制圆

最近开始折腾Qt了&#xff0c;手头上的一个项目需要用到Qt来绘制一些简单图像。记录下Qt绘制圆的过程&#xff1a;对于以A为圆心&#xff0c;半径为R的圆&#xff0c;外部有一个外切的正方形&#xff0c;正方形上有B点。如下图所示&#xff1a;对于void QPainter::drawArc(int …

前端基础之HTML

HTML介绍 Web服务本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.secd(b"<h1>Hello world!</h1&g…

指令引用了 内存 该内存不能为read 一直弹窗_【翻译】使用Rust测试ARM和X86内存模型

原文标题: The Story of Tail Call Optimizations in Rust 原文标题: Examining ARM vs X86 Memory Models with Rust原文链接: https://www.nickwilcox.com/blog/arm_vs_x86_memory_model/公众号&#xff1a; Rust碎碎念苹果公司最近宣布&#xff0c;他们将要把笔记本和桌面电…

Docker应用二:docker常用命令介绍

Docker常用命令使用介绍 docker中常用的命令: 1、docker search image_name:搜查镜像 2、docker pull image_name:从镜像库中拉去镜像 3、docker run image_name:运行容器 --restartalways:容器退出后重新启动 --name:自定容器名字 --d:后台运行容器 --i:交互模式 --t:打开一个…

关于Ubuntu使用笔记

Ubuntu vm tools 安装 sudo apt install open-vm-tools-desktop 在安装程序时Ubuntu会将安装目录锁定&#xff0c;安装结束后会解除锁定&#xff0c;中断安装后无法再安装其他软件解决方案 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavail…

具有可执行Tomcat的独立Web应用程序

在部署应用程序时&#xff0c;简单性是最大的优势。 您将了解到&#xff0c;尤其是在项目发展且需要在环境中进行某些更改时。 将整个应用程序打包到一个独立且自足的JAR中似乎是个好主意&#xff0c;尤其是与在目标环境中安装和升级Tomcat相比。 过去&#xff0c;我通常将Tomc…

css网页中设置背景图片的方法详解

在css代码中设置背景图片的方法&#xff0c;包括背景图片、背景重复、背景固定、背景定位等 用css设置网页中的背景图片&#xff0c;主要有如下几个属性&#xff1a; 1&#xff0c;背景颜色 {">说明&#xff1a;参数取值和颜色属性一样 注意&#xff1a;在HTML当中&am…

node-sass安装不成功的问题

SASS_BINARY_SITEhttps://npm.taobao.org/mirrors/node-sass/ npm install node-sass 简单粗暴的执行上述的命令。转载于:https://www.cnblogs.com/czaiz/p/6918114.html

npm升级依赖包_Taro跨端开发之依赖管理

昨天跑的好好项目,今天跑不起来我们在开发周期比较长的前端项目的时候,必然会遇到依赖管理的问题. 我们在开发项目的时候,我们用了大量的三方库.这些三方的依赖库时不时的会更新自己的代码.第三方依赖库的代码更新会很容易造成代码运行的不稳定, 比如昨天还跑的好好的项目,另一…

QOTD:Java线程与Java堆空间

以下问题很常见&#xff0c;并且与OutOfMemoryError有关&#xff1a;在JVM线程创建过程和JVM线程容量期间无法创建新的本机线程问题。 这也是我向新技术候选人&#xff08;高级职位&#xff09;提出的典型面试问题。 我建议您在查看答案之前尝试提供自己的答复。 题&#xff1…

sql查询重复项

select * from [表A] where id in (select id from [表A] group by id having count(id) >1 )转载于:https://www.cnblogs.com/wuyujie/p/7885017.html

java util logging_简单日志记录,使用java.util.logging

jspservletJavaBean模式下,可以做个简单的日志记录,日志文件保存在服务器.(Tomcat)package controller;import java.io.File;import java.io.IOException;import java.util.logging.FileHandler;import java.util.logging.Level;import java.util.logging.Logger;import javax.…

超级高铁

超级高铁 作者&#xff1a;武培&#xff0c;高培焱 作品来源&#xff1a;实践 美国电动汽车公司特斯拉和美国科技公司ET3都公布了“真空管钢运输”计划&#xff0c;特斯拉将其命名为“超级高铁”&#xff0c;ET3因列车外观酷似胶囊因而称之为“吃胶囊”列车。根据ET3公司的介绍…