当前位置: 首页 > news >正文

怎么做网站前端惠安县住房和城乡建设局网站

怎么做网站前端,惠安县住房和城乡建设局网站,seo技巧优化,上海市建设工程材料网站一篇文章理解WebSocket原理 1.HTTP协议(半双工通信): HTTP是客户端向服务器发起请求,服务器返回响应给客户端的一种模式。 特点: 1.只能是客户端向服务器发起请求,是单向的。 2.服务器不能主动发送数据给客户端。 半双工通信…

一篇文章理解WebSocket原理

1.HTTP协议(半双工通信):

HTTP是客户端向服务器发起请求,服务器返回响应给客户端的一种模式。

特点:

1.只能是客户端向服务器发起请求,是单向的。

2.服务器不能主动发送数据给客户端。

半双工通信的局限性也从中体现出来,同一时刻数据的传输只能是单向的,想在某一段时间内监听服务器是否有新数据的更新就要不停的从客户端这边发起请求,如果服务器有数据更新那么就会返回响应。那么这种做法是特别消耗性能的,想到一种更优的办法就是监听服务器如果有数据改变就立刻返回响应,不需要客户端一直不停的请求。

举个例子,HTTP协议就是,小明要去超市买薯片,老板说没有,过了一会小明又跑来超市买薯片,老板还是说没有,这样反反复复过了很多次,超市进货的薯片终于到了,小明也拿到薯片了。这样感觉是不是特别麻烦呢?如果使用WebSocket协议就是,小明把他的电话和地址给了超市老板,当超市进货的薯片到了后,老板第一时间给小明打电话告诉他薯片到了,小明可以自己来拿,也可以超市老板送货上门。这样是不是就更省时更省事呢?

2.WebSocket协议(全双工通信):

WbeSocket 是 Html5 开始提供的一种浏览器与服务器之间进行全双工通信的协议(websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,属于应用层,基于TCP协议,并且复用HTTP握手通道,是一个持久化的协议

简单来说,建立一个Websocket连接,客户端浏览器首先要向服务器发起一个HTTP请求,这个请求头中包含了特殊的"Upgrade: WebSocket"信息表明这是一个从HTTP升级到WebSocket的请求,服务器解析之后返回响应给客户端并建立了WebSocket连接。

3.WebSocket 与 HTTP 的关系:

在这里插入图片描述

在这里插入图片描述

相同点:

都是基于TCP协议的,都是可靠性传输协议。

都是应用层协议

不同点:

WebSocket是全双工通信协议,模拟Socket协议,可以双向发送或接收信息。

HTTP是单向通信的。

WebSocket是需要浏览器和服务器握手建立连接的。

HTTP是浏览器发请求向服务器的连接,而服务器则不会提前知道这个连接。

3.http和WebSocket的联系:

WebSocket在建立握手是,数据是通过HTTP传输的,但是建立了连接后,传输则不需要HTTP协议。

总体过程:

客户端发起HTTP请求,请过三次握手后与服务器建立TCP连接,HTTP请求中包含了WebSocket的版本号信息:Upgrade、Connection、WebSocket-Version等。

服务器接收到客户端的握手请求后,使用HTTP协议返回响应给客户端。

最后,客户端收到连接成功消息后,可以借助TCP传输协议和服务器进行全双工通信。

4.WebSocket特点:

  1. WebSocket约定了一个通信的规范,通过一个握手机制,将客户端与服务器端进行一个类似TCP的连接,实现了通信。

  2. 在使用WebSocket之前,客户端与服务器端的交互是基于HTTP协议短连接长连接

  3. WebSocket的协议名是"ws",是一种全新的协议,不属于HTTP无状态协议

WebSocket和socket的区分:从本质上来说,socket并不是一个新的协议,它只是为了便于程序员进行网络编程而对tcp/ip协议族通信机制的一种封装。

5.实现WebSocket用例:

事件

说明

open

连接建立时触发

message

客户端接收到服务器消息时触发

error

通信出现错误时触发

close

连接关闭时触发

send

客户端给服务器发送数据

5.1 java api实现

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;public class SocketServer extends WebSocketServer {public static void main(String[] args) throws InterruptedException, IOException {int port = 8887; // 843 flash policy portSocketServer s = new SocketServer(port);s.start();System.out.println("ChatServer started on port: " + s.getPort());BufferedReader sysIn = new BufferedReader(new InputStreamReader(System.in));while (true) {String in = sysIn.readLine();s.broadcast(in);if (in.equals("exit")) {s.stop(1000);break;}}}public SocketServer(int port) {super(new InetSocketAddress(port));}@Overridepublic void onOpen(WebSocket conn, ClientHandshake handshake) {conn.send("Welcome to the server!"); // This method sends a message to the new clientbroadcast("new connection: " + handshake.getResourceDescriptor()); // This method sends a message to all clients connectedSystem.out.println(conn.getRemoteSocketAddress().getAddress().getHostAddress() + " entered the room!");}@Overridepublic void onClose(WebSocket conn, int code, String reason, boolean remote) {broadcast(conn + " has left the room!");System.out.println(conn + " has left the room!");}@Overridepublic void onMessage(WebSocket conn, String message) {broadcast(message);System.out.println(conn + ": " + message);}@Overridepublic void onError(WebSocket conn, Exception ex) {ex.printStackTrace();if (conn != null) {// some errors like port binding failed may not be assignable to a specific// websocket}}@Overridepublic void onStart() {System.out.println("Server started!");setConnectionLostTimeout(0);setConnectionLostTimeout(100);}}

启动服务
http://www.websocket-test.com/
进入此网站,连接本地websokcet服务ws://127.0.0.1:8887
在这里插入图片描述
在这里插入图片描述
可以互相发送消息

5.2 springboot结合redis实现发给其他人

在这里插入图片描述
修改端口,启动3个实例,8080,8081,8082
在这里插入图片描述
http://www.websocket-test.com/
依旧进入此网站连接本地启动的websocket服务
其中1和11两个客户端连同一台服务

ws://127.0.0.1:8080/websocket?userId=1
ws://127.0.0.1:8080/websocket?userId=11
ws://127.0.0.1:8081/websocket?userId=2
ws://127.0.0.1:8082/websocket?userId=3

在这里插入图片描述
在这里插入图片描述
在1客户端发送消息给3
在这里插入图片描述

1和3连接的服务端不在同一个,通过redis发布,3所在服务端的redis监听消息,输出信息,然后发给3客户端

1服务端
在这里插入图片描述
3服务端输出redis监听的消息
在这里插入图片描述
3服务端收到发给3客户端
在这里插入图片描述

http://www.yayakq.cn/news/448575/

相关文章:

  • 泰安如何选择网站建设网站建设企业开源
  • 网站重定向代码网站设计用那个软件
  • 网站好玩代码和特效个人网站的设计
  • 网站开发需要什么服务器个人网站官网
  • 江山集团网站建设南京 网站建站
  • 网站怎么做图片自建网站教程视频
  • 三亚建设工程信息网站做网站教程pdf
  • h5网站制作公司wordpress评论机器人
  • 字体模板素材免费下载网站莱芜网站优化排名公司
  • 周宁县建设局网站上海公共招聘网
  • 门户网站的优点桂林商品房做民宿在哪个网站登记好
  • 网站设计制作方案seo按天计费系统定制
  • 网站建设外出考察信息购物平台需要什么资质
  • 推广型网站建设软件东莞住建局局长主动投案
  • 网站图片切换代码网站建设修改建议
  • 做网站的空间需要买吗顺的网站建设效果
  • 烟台网站建设公司报价易雅达网站建设公司
  • 茶叶网络营销网站建设论文常见网站漏洞
  • 深圳做宣传网站的公司此网站域名即将过期
  • 网站如何做查询表单手机网站 触屏
  • php一台电脑做网站免费店铺logo在线制作
  • 建站工具 比较小程序开发制作软件
  • 品牌网站设计制作公司地址网站切换
  • 给传销产品做网站注销公司要花多少费用
  • 重庆网站建设公司那好初学者3d建模要什么软件
  • 开发一套网站多少钱audio player wordpress 使用方法
  • 沈阳设计网站公司网站可以写代码的网站有哪些问题
  • 龙华营销型网站制作哪家好童子营网站建设方案
  • 网站免费建站性盈盈影院深圳工程建设信息网站
  • 网站开发规范文档做响应式网站代码