关于websocket 的连接问题

[复制链接]
查看11 | 回复2 | 2021-1-27 07:15:46 | 显示全部楼层 |阅读模式
今天刚接触websocket,使用websocket一连接到服务器马上就断开了。
这是什么问题啊。


分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:15:46 | 显示全部楼层
把代码贴出来鬼知道你怎么写的啊,
回复

使用道具 举报

千问 | 2021-1-27 07:15:46 | 显示全部楼层
引用1楼xiongdejun的回复:把代码贴出来鬼知道你怎么写的啊,
jsp部分


Title

当前登录用户:${userName}
消息:
发送


配置文件MyWebSocketConfig
@Component
@EnableWebSocket
publicclassMyWebSocketConfigextendsWebMvcConfigurerAdapterimplementsWebSocketConfigurer{
@Autowired
privateMyWebSocketHandlerhandler;
@Override
publicvoidregisterWebSocketHandlers(WebSocketHandlerRegistrywebSocketHandlerRegistry){
//添加websocket处理器,添加握手拦截器
webSocketHandlerRegistry.addHandler(handler,"/ws").addInterceptors(newMyHandShakeInterceptor());
//添加websocket处理器,添加握手拦截器
webSocketHandlerRegistry.addHandler(handler,"/ws/sockjs").addInterceptors(newMyHandShakeInterceptor()).withSockJS();
}
}
拦截器MyHandShakeInterceptor.java
publicclassMyHandShakeInterceptorimplementsHandshakeInterceptor{
@Override
publicbooleanbeforeHandshake(ServerHttpRequestserverHttpRequest,ServerHttpResponseresponse,WebSocketHandlerwsHandler,Mapmap)throwsException{
System.out.println("Websocket:用户[ID:"+((ServletServerHttpRequest)serverHttpRequest).getServletRequest().getSession(false).getAttribute("user")+"]已经建立连接");
if(serverHttpRequestinstanceofServletServerHttpRequest){
ServletServerHttpRequestservletRequest=(ServletServerHttpRequest)serverHttpRequest;
HttpSessionsession=servletRequest.getServletRequest().getSession(false);
//标记用户
Useruser=(User)session.getAttribute("user");
if(user!=null){
map.put("uid",user.getId());//为服务器创建WebSocketSession做准备
System.out.println("用户id:"+user.getId()+"被加入");
}else{
System.out.println("user为空");
returnfalse;
}
}
returntrue;
}
@Override
publicvoidafterHandshake(ServerHttpRequestrequest,ServerHttpResponseresponse,WebSocketHandlerwsHandler,Exceptionexception){
}
}
消息处理MyWebSocketHandler.java
@Component
publicclassMyWebSocketHandlerimplementsWebSocketHandler{
//当MyWebSocketHandler类被加载时就会创建该Map,随类而生
publicstaticfinalMap[I]userSocketSessionMap;
static{
userSocketSessionMap=newHashMap[I]();
}
//握手实现连接后
publicvoidafterConnectionEstablished(WebSocketSessionwebSocketSession)throwsException{
intuid=(Integer)webSocketSession.getAttributes().get("uid");
if(userSocketSessionMap.get(uid)==null){
userSocketSessionMap.put(uid,webSocketSession);
}
System.out.println("握手实现连接后");
}
//发送信息前的信息处理
publicvoidhandleMessage(WebSocketSessionwebSocketSession,WebSocketMessagewebSocketMessage)throwsException{
if(webSocketMessage.getPayloadLength()==0)return;
//得到Socket通道中的数据并转化为Message对象
Messagemsg=newGson().fromJson(webSocketMessage.getPayload().toString(),Message.class);
Timestampnow=newTimestamp(System.currentTimeMillis());
msg.setMessageDate(now);
//发送Socket信息
sendMessageToUser(msg.getToId(),newTextMessage(newGsonBuilder().setDateFormat("yyyy-MM-ddHH:mm:ss").create().toJson(msg)));
}

@Override
publicvoidhandleTransportError(WebSocketSessionwebSocketSession,Throwableexception)throwsException{
}
publicvoidafterConnectionClosed(WebSocketSessionwebSocketSession,CloseStatuscloseStatus)throwsException{
System.out.println("WebSocket:"+webSocketSession.getAttributes().get("uid")+"closeconnection");
Iteratoriterator=userSocketSessionMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry[I]entry=iterator.next();
if(entry.getValue().getAttributes().get("uid")==webSocketSession.getAttributes().get("uid")){
userSocketSessionMap.remove(webSocketSession.getAttributes().get("uid"));
System.out.println("WebSocketinstaticMap:"+webSocketSession.getAttributes().get("uid")+"removed");
}
}
}
@Override
publicbooleansupportsPartialMessages(){
returnfalse;
}
//发送信息的实现
publicvoidsendMessageToUser(intuid,TextMessagemessage)
throwsIOException{
WebSocketSessionsession=userSocketSessionMap.get(uid);
if(session!=null&&session.isOpen()){
session.sendMessage(message);
}
}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行