websocket java详解_WebSocket详解

WebSocket详解

WebSocket可提供一个在

单一TCP连接全双工双向通信协议。全双工意味着客户端和服务器可以独立发送信息给

对方。双向意味着客户端可以向服务器发送信息,

反之亦然。

WebSocket是定义于IETF RFC 6455协议和W3C

JavaScript API。该协议在TCP层定义了一个开放的握手和基本的讯息。该API允许Web页使用WebSocket协议双向

与远程主机通信。

不同于HTTP,它不需要创建一个新的TCP连接就能发送一个消息,可以持久不断地用于客户端和服务器之间的每一个交换。一旦最初通过HTTP

握手),客户端

和服务器可以独立互相发送信息。

客户端和服务器之间的通信是对称的,但有两个

差异:

客户端发起连接到服务器,是监听一个WebSocket请求。

客户端使用URI连接到一个服务器。一个服务器可以监听同一个URI多个客户端。

客户端和服务器来回传输数据的单位称消息。消息可以是文本或二进制数据。

还携带用于协议级的信令数据。

Java API定义了WebSocket应用的标准API

,支持:

使用注释和接口创造一个WebSocket客户端和服务器端点

生产和消费WebSocket的文本,二进制,和控制消息

发起和拦截WebSocket的生命周期事件

WebSocket会话配置和管理,如超时,重试等

WebSocket应用如何在Java EE 安全模型上工作

注释服务器端点

可以将一个普通Java对象(POJO)使用@serverendpoint作为WebSocket服务器的端点

。这个端点也被称为注释的终点:

@ServerEndpoint("/chat")

public class ChatServer {

@OnMessage

public String receiveMessage(String message) {

//. . .

}

}

注释的类必须有一个公共的

无参数构造函数。

@onMessage注解的Java方法用于接收传入的WebSocket信息。

这个信息可以是文本,二进制。

接受字符串信息:

public void receiveMessage(String s) {

//. . .

}

接受Java原始类型信息:

public void receiveMessage(int i) {

//. . .

}

接受一个大文本,如果接收到最后一部分是布尔参数为真,否则为假。

public void receiveBigText(String message, boolean last) {

//. . .

}

使用一个Reader接收整个文本消息阻塞流:

@OnMessage

public void processReader(Reader reader) {

//. . .

}

使用字节[ ]或字节缓冲区接收整个二进制消息:

public void receiveMessage(ByteBuffer b) {

//. . .

}

使用字节[ ]和字节缓冲接受大的二进制,如果接收到的最后一部分是布尔参数为真:

public void receiveBigBinary(ByteBuffer buf, boolean last) {

//. . .

}

使用InputStream得到完整的二进制消息作为阻塞流:

public void processStream(InputStream stream) {

//. . .

}

使用pongmessage接受pong消息:

public void processPong(PongMessage pong) {

//. . .

}

使用了Java的字符串:

@ServerEndpoint("/chat/{room}")

public class MyEndpoint {

@OnMessage

public void receiveMessage(String message,

@PathParam("room")String room) {

//. . .

}

}

“pathparam用于标注方法参数,获取在服务器端点URI/chat/{room}的room参数值

public void receiveMessage(String message, Session session) {

//. . .

}

Session表明两个WebSocket端点对话

连接的另一端。在这种情况下,响应到客户端可能

返回:

public void receiveMessage(String message, Session session) {

session.getBasicRemote().sendText(...);

}

参数可以以任何顺序列出。该方法可以有一个void返回类型。这一消息是消耗在终点

没有返回响应。

MaxMessageSize属性可以被用来定义

消息字节最大大小:

@Message(maxMessageSize=6)

public void receiveMessage(String s) {

//. . .

}

在这个程序中,如果超过6个字节的信息被接收,就报告错误

和连接关闭。 使用@OnClose生命周期回调拦截,你还可以得到精确的错误代码和消息的。默认值为1指示

没有最大值。

MaxMessageSize属性不适用使用流

或reader获取的传入消息。

高级定制

@OnOpen

public void open(Session s) {

//. . .

}

@OnClose

public void close(CloseReason c) {

//. . .

}

@OnError

public void error(Throwable t) {

//. . .

}

OnOpen在这个端点一个新的连接建立时被调用。

参数提供了连接的另一端的更多细节。

OnClose在连接被终止时被调用,。参数c

提供更多细节,为什么一个WebSocket连接关闭。

在Java EE平台部署端点,符合CDI规范描述支持完全依赖注入,

。可在所有的WebSocket端点类实现字段,方法和构造器注入。

@ServerEndpoint("/chat")

public class ChatServer {

@Inject User user;

//. . .

}

端点类继承:

@ServerEndpoint("/chat")

public class ChatServer {

}

public class CustomChatServer extends ChatServer {

//. . .

}

在这段代码中,该chatserver类被确定为一个WebSocket端点;然而,

customchatserver不是。如果它需要被公认为一个WebSocket端点,然后

必须明确标有@serverendpoint注释。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket 是一种在 Web 浏览器和服务器之间实现双向通信的协议。它允许浏览器和服务器之间通过单个 TCP 连接进行实时数据传输。Java 提供多种方式来实现 WebSocket,下面我将为您详细解释一下。 1. 使用 Java WebSocket API(JSR 356):Java WebSocket API 是 Java EE 7 规范中引入的一种实现 WebSocket 的方式。它提供了一套用于创建 WebSocket 客户端和服务器端的类和接口。通过使用这些类和接口,您可以轻松地创建一个 WebSocket 服务器或客户端。Java WebSocket API 使用注解和回调函数来处理 WebSocket 事件和消息。 2. 使用第三方库:除了 Java WebSocket API,还有一些第三方库可以用于实现 WebSocket 功能。其中比较流行的是 Tyrus、Jetty 和 Netty。这些库提供了更灵活和高级的功能,例如支持 SSL、自定义握手处理、负载均衡等。 下面是一个使用 Java WebSocket API 的简单示例: ```java @ServerEndpoint("/websocket") public class MyWebSocket { @OnOpen public void onOpen(Session session) { System.out.println("WebSocket opened: " + session.getId()); } @OnMessage public void onMessage(String message, Session session) { System.out.println("Received message: " + message); session.getBasicRemote().sendText("Echo: " + message); } @OnClose public void onClose(Session session) { System.out.println("WebSocket closed: " + session.getId()); } } ``` 在上面的示例中,我们使用 `@ServerEndpoint` 注解将一个类声明为 WebSocket 服务器端。`@OnOpen`、`@OnMessage` 和 `@OnClose` 注解分别用于处理 WebSocket 的连接建立、消息接收和连接关闭事件。您可以根据需要在这些方法中添加自定义逻辑。 以上是关于 WebSocketJava 中的简要介绍和示例代码。希望对您有所帮助!如果您有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值