为什么websocket onmessage有时候偶尔不接收消息_JavaEE7 HTML5利用WebSocket实现即时通讯...

本文介绍如何在Java EE环境下使用WebSocket实现一个简单的服务器端和客户端的即时通讯。通过@ServerEndpoint注解定义服务器端,onOpen、onClose、onMessage方法处理连接、关闭和消息接收。客户端通过JavaScript创建WebSocket连接,并处理接收到的消息。
摘要由CSDN通过智能技术生成

作者:长东

转载自:

https://www.cnblogs.com/lingbing/p/6089331.html

HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力。

换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来实现。

在本教程中我们将在Java EE环境下实现一个简单的websockect服务器端来和客户端进行数据交互。

本教程需要以下环境:

  1. JDK 1.7.0.21

  2. tomcat 7

: Java EE 7中才引入了WebSocket。

WebSocket服务器端

WebSocketServer 代码:
package com.bing.biz.websocket;import java.io.IOException;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint; //该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。@ServerEndpoint("/webSocketServer/{userId}")public class WebSocketServer {
             /**     * 连接建立成功调用的方法     * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据     * @throws IOException      */    @OnOpen    public void onOpen(@PathParam("u
要在 Java 中实现 WebSocket,可以使用Java API for WebSocket。这个 API 是在 JavaEE 7 中引入的,它提供了一组用于实现 WebSocket 服务端和客户端的类和接口。 以下是一个简单的 WebSocket 服务端的示例代码: ```java import java.io.IOException; import javax.websocket.OnMessage; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/websocket") public class WebSocketServer { @OnMessage public void onMessage(String message, Session session) throws IOException { session.getBasicRemote().sendText("Received: " + message); } } ``` 在这个示例中,我们使用了 `@ServerEndpoint` 注解来标识 WebSocket 服务端的端点(endpoint),它指定了客户端连接 WebSocket 时要使用的 URL。在这个例子中,客户端将使用 `/websocket` URL 连接到 WebSocket 服务器。 `@OnMessage` 注解表示当 WebSocket 服务器收到客户端发送的消息时,会调用 `onMessage` 方法来处理消息。在这个例子中,我们简单地将收到的消息发送回客户端。 要启动这个 WebSocket 服务端,可以使用以下代码: ```java import javax.websocket.server.ServerEndpointConfig; import org.glassfish.tyrus.server.Server; public class WebSocketServerApp { public static void main(String[] args) { Server server = new Server("localhost", 8080, "/websockets", null, WebSocketServer.class); try { server.start(); System.out.println("WebSocket server started"); Thread.currentThread().join(); } catch (Exception e) { e.printStackTrace(); } finally { server.stop(); } } } ``` 在这个示例中,我们使用了 Tyrus WebSocket 实现库来启动 WebSocket 服务器。我们指定了服务器监听的主机名和端口号,以及 WebSocket 服务器的上下文路径和 `WebSocketServer` 类作为 WebSocket 服务端的实现。最后,我们使用 `start` 方法启动 WebSocket 服务器。 启动 WebSocket 客户端也很简单,可以使用以下代码: ```java import java.net.URI; import javax.websocket.ClientEndpoint; import javax.websocket.ContainerProvider; import javax.websocket.OnMessage; import javax.websocket.Session; import javax.websocket.WebSocketContainer; @ClientEndpoint public class WebSocketClient { @OnMessage public void onMessage(String message) { System.out.println("Received: " + message); } public static void main(String[] args) { WebSocketContainer container = ContainerProvider .getWebSocketContainer(); try { Session session = container.connectToServer(WebSocketClient.class, URI.create("ws://localhost:8080/websockets/websocket")); session.getBasicRemote().sendText("Hello"); Thread.currentThread().join(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,我们使用了 `@ClientEndpoint` 注解来标识 WebSocket 客户端的端点。当客户端收到消息时,`onMessage` 方法将被调用。 我们使用 `ContainerProvider.getWebSocketContainer()` 方法获取 WebSocket 容器,然后使用 `connectToServer` 方法连接到 WebSocket 服务器。在这个例子中,我们将 WebSocket URL 指定为 `ws://localhost:8080/websockets/websocket`,这是 WebSocket 服务器的 URL,以及 WebSocket 服务端的 URL 路径。 最后,我们使用 `session.getBasicRemote().sendText("Hello")` 方法向 WebSocket 服务器发送消息。 这就是一个简单的 Java WebSocket 实现示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值