开发者社区> 问答> 正文

springmvc+websocket的问题?报错

我按照spring官网的文档搭建了springwebsocket的环境,但是我在页面用socketjs和websocket连接时,总是报错,有做过的朋友,指点指点,下面是我的代码

websocket配置文件


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:websocket="http://www.springframework.org/schema/websocket"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/websocket
        http://www.springframework.org/schema/websocket/spring-websocket.xsd">

    <websocket:handlers>
        <websocket:mapping path="/handler" handler="webSocketHandler"/>
        <!--<websocket:mapping path="/binaryHandler" handler="binaryHandler"/>-->
        <websocket:handshake-interceptors>
            <bean class="com.ballchen.websocket.HandshakeInterceptor"></bean>
        </websocket:handshake-interceptors>
        <!--<websocket:sockjs/>-->
    </websocket:handlers>

    <websocket:handlers>
        <websocket:mapping path="/socketjs/handler" handler="webSocketHandler"/>
        <!--<websocket:mapping path="/binaryHandler" handler="binaryHandler"/>-->
        <websocket:handshake-interceptors>
            <bean class="com.ballchen.websocket.HandshakeInterceptor"></bean>
        </websocket:handshake-interceptors>
        <websocket:sockjs/>
    </websocket:handlers>

    <bean class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
        <property name="maxTextMessageBufferSize" value="8192"/>
        <property name="maxBinaryMessageBufferSize" value="8192"/>
    </bean>

</beans>



握手链接拦截器



package com.ballchen.websocket;

import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.socket.WebSocketHandler;

import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * Created by Administrator on 2016/12/13 0013.
 */
public class HandshakeInterceptor implements org.springframework.web.socket.server.HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
        if (serverHttpRequest instanceof ServletServerHttpRequest) {
            ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) serverHttpRequest;
            HttpSession session = servletRequest.getServletRequest().getSession(false);
            String userName = "xq";
            if (session != null) {
                //使用userName区分WebSocketHandler,以便定向发送消息
//                String userName = (String) session.getAttribute("WEBSOCKET_USERNAME");
                map.put("WEBSOCKET_USERNAME",userName);
            }
        }
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {

    }
}



消息处理器handler


package com.ballchen.websocket;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/12/13 0013.
 */
@Component("webSocketHandler")
public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler {

    private static final List<WebSocketSession> users = new ArrayList<>();
    /**
     * 初次链接成功执行
     * @param webSocketSession
     * @throws Exception
     */
    @Override
    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {

    }


    /**
     * 消息处理
     * @param webSocketSession
     * @param webSocketMessage
     * @throws Exception
     */
    @Override
    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {

    }

    /**
     * 链接错误
     * @param webSocketSession
     * @param throwable
     * @throws Exception
     */
    @Override
    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {

    }

    /**
     * 链接关闭
     * @param webSocketSession
     * @param closeStatus
     * @throws Exception
     */
    @Override
    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {

    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}



前端访问代码1.websocket
var  wsServer = 'ws://127.0.0.1:8080/handler';
var  websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) { onOpen(evt) };
websocket.onclose = function (evt) { onClose(evt) };
websocket.onmessage = function (evt) { onMessage(evt) };
websocket.onerror = function (evt) { onError(evt) };
function onOpen(evt) {
    console.log("Connected to WebSocket server.");
}
function onClose(evt) {
    console.log("Disconnected");
}
function onMessage(evt) {
    console.log('Retrieved data from server: ' + evt.data);
}
function onError(evt) {
    console.log('Error occured: ' + evt.data);
}



前端访问代码2.socketjs
var sock = new SockJS('http://localhost:8080/socketjs/handler');
    sock.onopen = function() {
        console.log('open');
    };
    sock.onmessage = function(e) {
        console.log('message', e.data);
    };
    sock.onclose = function() {
        console.log('close');
    };

    sock.send('Hello WebSocket!!!');
    sock.close();



我在浏览器里面输入地址http://localhost:8080/socketjs/handler,显示效果如下图

用socketjs连接时,报如下错误


还请会的朋友不吝赐教。


展开
收起
爱吃鱼的程序员 2020-06-08 20:09:20 640 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    websocket=newSockJS('/sockjs/handler');试试。

    或者加ws://

    2020-06-08 20:09:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载