`
gaojingsong
  • 浏览: 1197284 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA之WebSocket介绍】

阅读更多

一、WebSocket介绍

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

 

The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or <iframe>s and long polling)

WebSocket协议支持(在受控环境中运行不受信任的代码的)客户端与(选择加入该代码的通信的)远程主机之间进行全双工通信。用于此的安全模型是Web浏览器常用的基于原始的安全模式。 协议包括一个开放的握手以及随后的TCP层上的消息帧。 该技术的目标是为基于浏览器的、需要和服务器进行双向通信的(服务器不能依赖于打开多个HTTP连接(例如,使用XMLHttpRequest或<iframe>和长轮询))应用程序提供一种通信机制。

 

二、WebSocket产生背景

简单的说,WebSocket协议之前,双工通信是通过多个http链接来实现,这导致了效率低下。WebSocket解决了这个问题。下面是标准RFC6455中的产生背景概述。

Historically, creating web applications that need bidirectional communication between a client and a server (e.g., instant messaging and gaming applications) has required an abuse of HTTP to poll the server for updates while sending upstream notifications as distinct HTTP calls.

This results in a variety of problems:

o The server is forced to use a number of different underlying TCP connections for each client: one for sending information to the client and a new one for each incoming message.

o The wire protocol has a high overhead, with each client-to-server message having an HTTP header. o The client-side script is forced to maintain a mapping from the outgoing connections to the incoming connection to track replies.

A simpler solution would be to use a single TCP connection for traffic in both directions. This is what the WebSocket Protocol provides. Combined with the WebSocket API , it provides an alternative to HTTP polling for two-way communication from a web page to a remote server.

The WebSocket Protocol is designed to supersede existing bidirectional communication technologies that use HTTP as a transport layer. Such technologies were implemented as trade-offs between efficiency and reliability because HTTP was not initially meant to be used for bidirectional communication (see [RFC6202] for further discussion).[1] 

长久以来, 创建实现客户端和用户端之间双工通讯的web app都会造成HTTP轮询的滥用: 客户端向主机不断发送不同的HTTP呼叫来进行询问。

这会导致一系列的问题:

1.服务器被迫为每个客户端使用许多不同的底层TCP连接:一个用于向客户端发送信息,其它用于接收每个传入消息。

2.有线协议有很高的开销,每一个客户端和服务器之间都有HTTP头。

3.客户端脚本被迫维护从传出连接到传入连接的映射来追踪回复。

一个更简单的解决方案是使用单个TCP连接双向通信。 这就是WebSocket协议所提供的功能。 结合WebSocket API ,WebSocket协议提供了一个用来替代HTTP轮询实现网页到远程主机的双向通信的方法。

WebSocket协议被设计来取代用HTTP作为传输层的双向通讯技术,这些技术只能牺牲效率和可依赖性其中一方来提高另一方,因为HTTP最初的目的不是为了双向通讯。(获得更多关于此的讨论可查阅RFC6202)

 

三、WebSocket产生背景实现原理

在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手” 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

1. Header

互相沟通的Header是很小的-大概只有 2 Bytes

2. Server Push

服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

 

 

四、WebSockets 握手

客户端和服务器端TCP连接建立在HTTP协议握手发生之后。通过HTTP流量调试,很容易观察到握手。客户端一创建一个 WebSocket实例,就会出现如下请求和服务器端响应: 

注意: 我们只录入了WebSocket握手所用到的HTTP头。

 

请求:

GET /byteslounge/websocket HTTP/1.1 

Connection: Upgrade 

Upgrade: websocket 

Sec-WebSocket-Key: wVlUJ/tu9g6EBZEh51iDvQ==

 

响应:

HTTP/1.1 101 Web Socket Protocol Handshake 

Upgrade: websocket 

Sec-WebSocket-Accept: 2TNh+0h5gTX019lci6mnvS66PSY=

注意:进行连接需要将通过Upgrade and Upgrade将协议升级到支持websocket HTTP头的Websocket协议。服务器响应表明请求被接受,协议将转换到WebSocket协议(HTTP状态码101):

HTTP/1.1 101 Web Socket Protocol Handshake

0
0
分享到:
评论

相关推荐

    java-websocket jar包

    Java WebSocket 是一种基于Java语言实现的WebSocket协议库,主要用于实现在Web应用中提供实时的双向通信功能。WebSocket协议是HTML5规范的一部分,它允许客户端和服务器之间建立持久性的连接,从而实现数据的双向推...

    java-WebSocket-1.3.7.jar和java-WebSocket-1.3.4.jar

    Java WebSocket 是一个轻量级、高性能的WebSocket客户端与服务器端实现库,主要为Java开发者提供在Web应用中实现实时双向通信的能力。标题提到的"java-WebSocket-1.3.7.jar"和"java-WebSocket-1.3.4.jar"是这个库的...

    java_websocket.jar

    import org.java_websocket.WebSocket; import org.java_websocket.WebSocketImpl; import org.java_websocket.framing.Framedata; import org.java_websocket.handshake.ClientHandshake; import org.java_...

    Java-WebSocket-jar

    Java-WebSocket jar包,封装WebSocket实现。

    java版本websocket实例下载

    在Java环境中,WebSocket的实现主要依赖于Java API for WebSocket (JSR 356)。这个“java版本websocket实例下载”包含了使用Java实现WebSocket的一个示例项目,我们可以从以下几个方面来理解和学习这个实例: 1. **...

    Android WebSocket 用法 ( 导入 Java-WebSocket 源码依赖 )

    【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 ) https://hanshuliang.blog.csdn.net/article/details/123633108 博客源码快照

    java 调用websocket 代码集成

    将WebSocket端点类部署到服务器后,客户端可以通过WebSocket URL(例如ws://yourserver/websocket)与之建立连接。 9. **安全性**: 在生产环境中,考虑使用WSS(WebSocket over SSL/TLS)以确保通信的安全性。这...

    org.java-websocket 是优秀的框架 在此基础,加了点小便利:简化,心跳,自动重连,心跳定制

    Java Websocket 框架是基于 Java 实现的轻量级网络通信库,它为开发者提供了在 WebSocket 协议下创建高效、灵活的双向通信应用的能力。标题中的“org.java-websocket”指的是这个框架的核心库,它使得在 Java 环境下...

    java实现websocket client

    java_websocket.jar最新jar包 可用java实现websocket客户端,使用demo: https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/example/ExampleClient.java

    Java-WebSocket-1.3.0.jar,Java-WebSocket-1.3.0-sources.jar

    Java WebSocket 是一个轻量级、高性能的WebSocket客户端与服务器端实现库,版本1.3.0代表了这个库的一个稳定版本。WebSocket协议是HTML5的一部分,它为建立持久的、双向通信的网络连接提供了标准,使得实时数据传输...

    Java-WebSocket-1.3.5.jar

    通过 纯Java连接WebSocket 不再通过其他方式,亲测可用

    java-websocket.rar

    java实现websocket客户端, Java-WebSocket-1.3.5.jar Java-WebSocket-1.3.6.jar Java-WebSocket-1.3.7.jar Java-WebSocket-1.3.8.jar Java-WebSocket-1.3.9.jar Java-WebSocket-1.4.0.jar Java-WebSocket-...

    Java-WebSocket源码

    Java WebSocket 源码分析 WebSocket 是一种在客户端与服务器之间建立长连接的协议,它提供了双向通信的能力,使得服务器可以主动向客户端推送数据。在Web应用中,WebSocket极大地优化了实时通信的需求,比如在线...

    Java-WebSocket-1.3.9 等jar资源

    Java-WebSocket-1.3.9、completion-ranking-python-0.1.3、libthrift-0.11.0、ml-completion-prev-exprs-models-1.11、python

    java-websocket-1.3.0.jar

    websocket

    Java-WebSocket-1.3.9+Current_zhihuan.zip

    Java WebSocket 是一种在Java平台上实现WebSocket协议的库,它允许开发者创建双向通信的Web应用程序,即服务器和客户端可以实时交换数据,而不仅仅是传统的HTTP请求和响应模式。此压缩包"Java-WebSocket-1.3.9+...

    Java-WebSocket-1.5.2.jar

    JavaWebsocket 1.5.2 jar包

    webSocket_java_websocket同步_websocket_

    在Java中,WebSocket的实现主要依赖于`javax.websocket` API,这个API是Java EE 7标准的一部分。下面我们将详细探讨WebSocket的工作原理、如何在Java中实现WebSocket以及同步问题。 1. **WebSocket工作原理**: ...

    Java-WebSocket-1.4.0.jar

    websocket前后台数据交互失败,并且报java.lang.IncompatibleClassChangeError

    java实现websocket

    java实现websocket服务实现前后端通信java实现websocket服务实现前后端通信java实现websocket服务实现前后端通信java实现websocket服务实现前后端通信java实现websocket服务实现前后端通信java实现websocket服务实现...

Global site tag (gtag.js) - Google Analytics