`
yihengvip
  • 浏览: 19620 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java API for WebSocket(一) 概述

阅读更多

翻译自Oracle官方文档 The Java EE 7 Tutorial,本篇是概述,各个章节将陆续翻译出来,与大家分享。水平有限,不当之处望大家批评指正。

概述

本章主要叙述Java API for WebSocket(JSR 356),它为创建WebSocket应用提供了支持。WebSocket是一个在TCP协议之上为两个对等端点之间提供全双工通信的应用协议。

在传统的 HTTP 请求-响应模式中,客户端请求资源,服务端进行响应。信息交换总是由客户端发起,如果客户端没有发起请求服务端就不能向它发送数据。当客户端偶尔地请求不经常发生变化的文档时,这种模式在万维网上工作的很好,但是随着网络资源迅速地变化以及用户希望在Web上获得更好的交互式体验,这种方式的局限性越来越凸显。Websocket协议通过在客户端和服务端之间提供一个全双工的通信通道致力于解决这些局限性。通过联合其他客户端技术,比如JavaScript和HTML5,WebSocket使Web应用能够提供更加丰富的用户体验。

接下来要介绍的内容如下:
  • WebSocket简介
  • 在Java EE 平台创建WebSocket应用
  • 编程式端点
  • 基于注解的端点
  • 发送和接收消息
  • 维护客户端状态
  • 使用编码器和解码器
  • Path 参数
  • 异常处理
  • 指定终端配置器类
  • dukeetf2 应用实例
  • websocketbot 应用实例
  • 关于WebSocket的更多信息

1 、WebSocket简介

在WebSocket应用中,服务器发布一个WebSocket端点,客户端通过端点的URI连接到服务器。连接建立以后,WebSocket协议是对等的,只要连接处于打开状态,客户端和服务端都可以随时互相发送信息。他们也都可以随时关闭连接。通常,客户端只连接到一个服务端,服务端可以接受多个客户端的连接。

WebSocket协议有两个部分:握手和数据传输。客户端通过使用URI向一个WebSocket端点发送请求而发起握手,WebSocket握手兼容现有的基于HTTP的底层结构:Web服务器把它当做HTTP连接升级请求来理解。下面是一个来自客户端的握手例子:

GET /path/to/websocket/endpoint HTTP/1.1

Host: localhost

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==

Origin: http://localhost

Sec-WebSocket-Version: 13

服务端响应客户端握手是这样的:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

服务端通过对Sec-WebSocket-Key请求头的值进行一个共知的运算获得Sec-WebSocket-Accept响应头的值。客户端也对Sec-WebSocket-Key头的值进行相同的运算,如果得到的值和服务端返回的值相匹配,连接就会成功建立。成功握手之后客户端和服务端就可以互相发送消息了。

WebSocket支持文本消息(用UTF-8编码)和二进制消息。WebSocket的控制帧有close、ping和pong(用于响应ping帧)。Ping帧和pong帧也可以包含应用数据。

WebSocket端点由以下形式的的URI来表示:

ws://host:port/path?query

wss://host:port/path?query

ws形式表示非加密的WebSocket连接,wss形式表示加密的连接。port部分是可选的,默认的非加密连接端口是80,加密连接端口是443。path部分指明了WebSocket端点在服务器中的位置。query部分也是可选的。

现在的web浏览器大多实现了WebSocket协议,并且提供JavaScript API来建立连接、发送消息和为WebSocket事件(比如打开连接、接收消息、关闭连接)指定回调方法。

2
0
分享到:
评论
1 楼 1260533105 2014-09-28  
uncaught invalidstateerror:Failed to execute 'send' on WebSocket
请问下,上面这个报错是神马问题安。刚刚接触websocket,对于这个问题我在网上查了半天还是没有找到问题的解决方法,求指导!!!!

相关推荐

    websocketdemo

    ### WebSocket概述 WebSocket协议是在HTTP协议的基础上进行扩展的,旨在提供一种持久化的连接方式,克服了HTTP协议的无状态性和请求-响应模式的局限性。它允许客户端和服务器之间建立长连接,双方可以自由地发送数据...

    WebSocket区分不同客户端两种方法(HttpSession和@PathParam)

    `HttpSession`是Java Servlet API中提供的一种机制,用于在一次会话过程中存储用户的数据。在一个Web应用程序中,每个用户的浏览器与服务器之间的交互都可以通过一个唯一的`HttpSession`对象来标识。因此,利用`...

    springmvc+websocket demo

    3. **客户端连接**:在前端页面(通常是JavaScript)中,使用WebSocket API创建连接,指定服务器的WebSocket地址。 4. **消息发送与接收**:客户端和服务器通过WebSocket连接发送和接收消息,可以使用`send()`方法...

    WebSocket利用netty连接入门项目

    WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在任意方向流动,而无需反复发起请求。在Web开发中,WebSocket为实时交互提供了强大的支持,比如在线聊天、股票实时...

    javaee-api-7.0.zip

    1. **WebSocket API概述**:WebSocket API提供了`javax.websocket`包,其中包含客户端和服务器端的编程接口。它允许开发者创建持久性的连接,可以双向传输数据,而无需反复建立新的HTTP连接。 2. **服务器端编程**...

    websocket入门demo

    2. **WebSocket服务端实现**:在服务端,通常使用Java的`javax.websocket` API或者Spring框架的`WebSocket`支持来创建WebSocket服务。服务端需要创建一个继承自`javax.websocket.Session`的类,并实现`onOpen`, `...

    Java-WebSocket-client-master.zip_Java编程_Java_

    在Java中,WebSocket的实现通常依赖于JSR 356规范,也称为Java API for WebSocket。 本压缩包"Java-WebSocket-client-master.zip"包含了一个Java WebSocket客户端的示例代码,非常适合初学者学习和理解WebSocket的...

    Java EE 6 DOC API (html版,英文完整)

    12. **WebSocket API**:虽然不是Java EE 6的一部分,但随着后续版本的更新,WebSocket成为了重要的通信协议,允许双向实时通信。 以上只是Java EE 6 API文档中部分核心知识点的概述,实际文档中包含的详细信息远...

    Spring-WebSocket-demo01.zip

    2. **Spring WebSocket 概述** Spring Framework 提供了WebSocket支持,包括基于STOMP(Simple Text Oriented Messaging Protocol)的抽象层,以及SimpMessagingTemplate类用于发送和接收消息。此外,还提供了...

    spring-websocket-4.1.6

    一、Spring WebSocket概述 Spring WebSocket 是Spring Framework的一部分,它提供了一种基于Spring编程模型的方式来处理WebSocket消息。这个版本4.1.6主要关注稳定性和性能优化,同时也保持了对早期版本的兼容性。 ...

    websocket监听数据库

    2. **WebSocket服务器**:使用WebSocket库(如Java的Jetty,Python的Flask-SocketIO,Node.js的socket.io)创建WebSocket服务器,接收并管理客户端连接。服务器需要维护一个连接池,以便在数据库变化时能找到所有...

    JAVAEE8API.zip

    6. **JAX-RS(Java API for RESTful Web Services)2.1**: 支持RESTful服务的创建,包括对HTTP标准方法、超媒体链接和WebSocket的增强支持。 7. **JSON-P(Java API for JSON Processing)1.1** 和 **JSON-B(Java ...

    websocket+servlet简单案例代码

    #### 二、WebSocket概述 WebSocket是一种网络通信协议,用于实现在客户端和服务器之间的全双工、双向通信。相较于HTTP协议,WebSocket具有以下优势: 1. **低延迟**:一旦建立连接,WebSocket可以保持长期活动状态...

    Java EE 6 API

    6. **WebSocket API**:Java EE 6首次引入WebSocket,提供了一种低延迟、双向通信的协议,使得服务器和客户端可以实时交互数据。 7. **Servlet 3.0**:Servlet规范的重大升级,添加了异步处理、过滤器链的改进、...

    websocket.zip

    Java标准库提供了一个WebSocket API,位于`javax.websocket`包下。这个API允许开发者创建WebSocket服务器端点(ServerEndpoint)和客户端端点(ClientEndpoint),以及处理连接事件、消息收发的方法。 **Spring ...

    JAVA_EE_api_中英文对照版.zip

    这个压缩包“JAVA_EE_api_中英文对照版.zip”包含了一个非常重要的资源——Java EE API的中英文对照版,这对于学习和理解Java EE技术具有极大的帮助。 1. **Java EE架构概述** Java EE平台基于服务导向架构(SOA)...

    springboot websocket demo 支持重连 浏览器桌面推送

    SpringBoot,作为一个轻量级的Java开发框架,提供了方便集成WebSocket的功能,使得开发者能够轻松构建实时、双向通信的应用。下面将详细阐述SpringBoot WebSocket的实现原理、配置、以及如何支持重连和浏览器桌面推...

    spring+springMVC+WebSocket 的学习笔记

    Spring 是一个开源的 Java 应用框架,它提供了一种模块化和可插入的架构,使得开发企业级应用变得更加容易。Spring 的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented ...

Global site tag (gtag.js) - Google Analytics