我按照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) { } }
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; } }
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); }
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();
用socketjs连接时,报如下错误我
还请会的朋友不吝赐教。
websocket=newSockJS('/sockjs/handler');试试。
或者加ws://
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。