websocket 获取连接id,如何在客户端获取会话ID? (WebSocket)

Is there any way to do this?

Client side:

function connectWebSocket() {

var socket = new SockJS('/socket');

stompClient = Stomp.over(socket);

stompClient.connect({}, function (frame) {

console.log("connected");

});

}

Server side is not important. After the code above has been executed I need to know my session id.

解决方案

To get session id we need to make some changes into SockJS library.

The string

var connid = utils.random_string(8);

is used to get our id. So, we need only complete it like this:

var connid = utils.random_string(8);

that.sessionId = connid;

and then we can read this field from the client code:

function connectWebSocket() {

var socket = new SockJS('/socket');

stompClient = Stomp.over(socket);

stompClient.connect({}, function (frame) {

console.log("connected, session id: " + socket.sessionId);

});

}

And if we need to know session id before calling connect method we can modify SockJS' constructor and connect method to use client-passed value.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于Spring Boot的WebSocket客户,它使用每个会话一个连接的方式: 首先,创建一个WebSocketConfig类,用于配置WebSocket客户: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*"); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 这里我们定义了一个名为“myHandler”的处理程序,它将处理来自“/myHandler”点的WebSocket连接。 接下来,创建一个WebSocket处理程序类(MyHandler),用于处理客户连接和消息: ```java public class MyHandler extends TextWebSocketHandler { private final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { String sessionId = session.getId(); sessions.put(sessionId, session); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { String sessionId = session.getId(); sessions.remove(sessionId); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String sessionId = session.getId(); String payload = message.getPayload(); // handle payload } } ``` 在这个处理程序中,我们使用ConcurrentHashMap存储每个会话WebSocketSession实例。 在“afterConnectionEstablished”方法中,我们将WebSocketSession添加到sessions映射中。 在“afterConnectionClosed”方法中,我们从sessions映射中删除WebSocketSession。 在“handleTextMessage”方法中,我们处理来自客户的消息,并执行必要的操作。 最后,我们可以使用Spring的WebSocketTemplate类来创建WebSocket客户,并连接到我们的WebSocket服务: ```java @Component public class MyWebSocketClient { private final WebSocketTemplate webSocketTemplate; public MyWebSocketClient() { webSocketTemplate = new WebSocketTemplate(); } public void connect() { webSocketTemplate.execute("ws://localhost:8080/myHandler", new WebSocketHandler() { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { // handle connection established } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { // handle message } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { // handle transport error } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { // handle connection closed } @Override public boolean supportsPartialMessages() { return false; } }); } } ``` 在这个WebSocket客户中,我们使用WebSocketTemplate类的execute方法来连接到我们的WebSocket服务。在连接建立后,我们可以处理来自服务的消息,并在连接关闭时执行必要的操作。 希望这可以帮助你实现一个基于Spring Boot的WebSocket客户,使用每个会话一个连接的方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值