java 使用websocket_Java使用WebSocket

maven引入jar包或者使用tomcat8以上中的websocket-api.jar

javax

javaee-api

7.0

provided

WebSocket.java

package com.web.common;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.websocket.*;

import javax.websocket.server.PathParam;

import javax.websocket.server.ServerEndpoint;

import java.io.IOException;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

/**

* WebSocket连接 sessionKey是url中的参数

*/

@ServerEndpoint("/websocket/{sessionKey}")

public class WebSocket {

private static final Logger log = LoggerFactory.getLogger(WebSocket.class);

//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

private static int onlineCount = 0;

//concurrent包的线程安全,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

private static Map webSockets = new ConcurrentHashMap<>();

//与某个客户端的连接会话,需要通过它来给客户端发送数据

private Session session;

/**

* 连接建立成功调用的方法

* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据

* @param sessionKey url地址参数

*/

@OnOpen

public void onOpen(Session session, @PathParam("sessionKey") String sessionKey){

if (!webSockets.containsKey(sessionKey)){

this.session = session;

webSockets.put(sessionKey, this);

addOnlineCount();

log.info("当前websocket连接数:" + onlineCount);

}

}

/**

* 连接关闭调用的方法

* @param sessionKey url地址参数

*/

@OnClose

public void onClose(@PathParam("sessionKey") String sessionKey){

if (webSockets.containsKey(sessionKey)){

webSockets.remove(sessionKey);

subOnlineCount();

log.info("当前websocket连接数:" + onlineCount);

}

}

/**

* 收到客户端消息后调用的方法

* @param message 客户端发送过来的消息

* @param session 可选的参数

*/

@OnMessage

public void onMessage(String message, Session session) {

log.info("来自客户端的消息:" + message);

}

/**

* 发生错误时调用

* @param session 可选的参数

* @param error 错误消息

*/

@OnError

public void onError(Session session, Throwable error){

log.error("websocket发生错误:" + error);

}

/**

* 该方法没有用注解,是根据自己需要添加的方法。在自己的业务中调用,发送消息给前端。

* @param sessionKey

* @param message 返回的结果

* @throws IOException

*/

public static void sendMessage(String sessionKey,String message) throws IOException {

WebSocket webSocket = webSockets.get(sessionKey);

if (null != webSocket){

log.info("websocket发送消息:" + message);

//同步发送 发送第二条时,必须等第一条发送完成

webSocket.session.getBasicRemote().sendText(message);

//异步发送

//webSocket.session.getAsyncRemote().sendText(message);

}

}

public static synchronized int getOnlineCount() {

return onlineCount;

}

public static synchronized void addOnlineCount() {

onlineCount++;

}

public static synchronized void subOnlineCount() {

onlineCount--;

}

}

前端js

var webSocket = null;

$(function () {

//判断当前浏览器是否支持WebSocket

if ('WebSocket' in window) {

webSocket = new _WebSocket("localhost:8080/test/websocket/123");

} else {

alert('当前浏览器不支持webSocket');

}

//连接成功建立的回调方法

websocket.onopen = function() {

console.info("WebSocket连接成功");

};

//连接出错

webSocket.onerror = function (ev) {

console.info('连接错误', ev);

};

//接收到消息的回调方法

webSocket.onmessage = function (ev) {

console.info(ev);

};

//连接关闭的回调方法

webSocket.onclose = function () {

console.info('WebSocket连接关闭');

};

});

//关闭WebSocket连接

function closeWebSocket() {

webSocket.close();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Java 中实现 WebSocket,可以使用 Java WebSocket API。以下是一个简单的示例: ```java import javax.websocket.*; import java.net.URI; @ClientEndpoint public class MyWebSocketClient { @OnOpen public void onOpen(Session session) { System.out.println("Connected to endpoint: " + session.getBasicRemote()); } @OnMessage public void onMessage(String message) { System.out.println("Received message: " + message); } public static void main(String[] args) { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); String uri = "ws://localhost:8080/myendpoint"; try { Session session = container.connectToServer(MyWebSocketClient.class, URI.create(uri)); session.getBasicRemote().sendText("Hello, World!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们定义了一个 `MyWebSocketClient` 类,并使用 `@ClientEndpoint` 注解将其标记为 WebSocket 客户端端点。我们还定义了两个注解方法,`onOpen()` 和 `onMessage()`,分别在连接建立和接收到消息时被调用。在 `main()` 方法中,我们使用 `WebSocketContainer` 来连接到 WebSocket 终端点,并向其发送一条消息。 在使用上述代码之前,需要确保已经引入 Java WebSocket API 的依赖项。可以使用以下 Maven 依赖项: ```xml <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version> </dependency> ``` 注意,以上代码仅适用于通过端口直接连接的 WebSocket。如果需要使用 SSL/TLS 连接,或者需要进行身份验证等操作,需要进行额外的配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值