这是/可能重复:
WebSocket-InvalidStateError:连接尚未建立。
我正在实行通知制度。并希望在用户登录时初始化套接字连接,并向他显示他的通知,以及如果发生了一些事件。
我的代码片段如下所示。
websocket.js:
var stompClient = null;
function connect( temp ) {
alert(temp);
//var socket = new SockJS("/websock");
//var socket = new SockJS("/websock"+temp);
var socket = new SockJS(context_path+"/websock"+temp);
//context_path == "/SupportCenter"
stompClient = Stomp.over(socket);
stompClient.connect({}, function( frame ){
console.log( "Connected :- "+frame );
stompClient.subscribe("/topic/notifications", function( notifications ) {
alert( notifications );
});
}, function( error ) {
alert( error );
});
alert();
getNotifications();
}
function getNotifications() {
stompClient.send("/app/hello", {}, "Hiiiiii");
}
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
/* (non-Javadoc)
* @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#registerStompEndpoints(org.springframework.web.socket.config.annotation.StompEndpointRegistry)
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/websock").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// TODO Auto-generated method stub
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
@Controller
public class WebSocketController {
@MessageMapping(value="/hello")
@SendTo("/topic/notifications")
public Notify hello() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Notify notify = new Notify();
notify.setMessage("Hello World !!!");
return notify;
}
}
<script type="text/javascript" src="<c:url value="/resources/js/sockjs.min.js"/>"></script>
<script type="text/javascript" src="<c:url value="/resources/js/stomp.min.js"/>"></script>
<script type="text/javascript" src="<c:url value="/resources/js/websocket.js"/>"></script>
<script type="text/javascript">
$(document).ready(function() {
//...
connect( '${nsec}');
});
网络选项卡
Originaly发帖到这个问题。
这是因为stompclient.connect()
方法是异步的。我不会暂停执行,直到建立连接。当您在alert()
之后调用getnotifications()
时,很可能还没有建立连接(如果alert()
需要足够的时间连接,则可能建立连接)。
您应该在stompclient.connect()
回调中调用getnotifications()
(就像使用stompclient.subscribe()
)一样),以确保在调用连接时已建立连接。
例如:
stompClient.connect({}, function( frame ){
console.log( "Connected :- "+frame );
stompClient.subscribe("/topic/notifications", function( notifications ) {
alert( notifications );
});
getNotifications();
}, function( error ) {
alert( error );
});
除此之外,您可以考虑在java代码中使用@subscribemapping
注释,以摆脱JavaScript中的显式消息,从而从服务器获得初始消息。这样,服务器在订阅建立后立即发送初始消息。
例如:
@MessageMapping(value="/hello")
@SubscribeMapping("/notifications")
@SendTo("/topic/notifications")
public Notify hello() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Notify notify = new Notify();
notify.setMessage("Hello World !!!");
return notify;
}
stompClient.connect({}, function( frame ){
console.log( "Connected :- "+frame );
stompClient.subscribe("/topic/notifications", function( notifications ) {
alert( notifications );
});
}, function( error ) {
alert( error );
});
我试图在我的应用程序中实现jpa 发展能力 所以,我的DataConfig看起来像这样: 但是,当我尝试启动应用程序时,会出现错误消息。制造战争- 已连接到服务器[2018-09-26 09:54:32631]工件未命名:正在部署工件,请稍候。。。2018年9月26日09:54:34.460警告[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。公猫dbcp。dbcp2。基本资源工厂。g
我正在用Java Swing制作一个游戏,其中有一个大POJO用来存储游戏的运行时数据,比如精灵的位置、当前显示的效果等等。我希望能够将其作为JSON保存到一个文件中,然后在以后重新构建。我发现Gson应该就是这么做的,但到目前为止我还没能让它工作。我总是遇到这样一个问题:它无法使嵌套在存储类中的某些变量可访问。 以下是我目前使用Gson的方式: 以下是我当前尝试使用时收到的错误消息: 是我在开头
我试图完成本教程,但我认为在配置网页时遇到了一些问题。我正在一步一步地制作教程,但它不起作用。。 错误]无法执行目标com。github。eirslett:frontend maven插件:1.10.3:project shop上的webpack(webpack生成):无法运行任务:“webpack”。js'失败了。组织。阿帕奇。平民执行官。ExecuteException:进程已退出,但出现错误
我试图创建一个springmvc项目配置与Hibernate使用web.xml 我的问题是,当我运行时,它不会自动创建用户表。 这是我的代码: 文件spring-config.xml 文件web.xml: 文件UserDAO: 文件UserDaoImpl: 文件用户: 这是我的日志:
我正在用Java Swing制作一个游戏,其中有一个大POJO用来存储游戏的运行时数据,比如精灵的位置、当前显示的效果等等。我希望能够将其作为Json保存到一个文件中,然后在以后重新构建。我发现Gson应该就是这么做的,但到目前为止我还没能让它工作。我总是遇到这样一个问题:它无法使嵌套在存储类中的某些变量可访问 以下是我目前使用Gson的方式: 这是当我尝试使用时,我当前收到的错误消息: 是我一开
我正在Java Spring/Hibernate中使用Swagger-UI。Swagger UI版本是2。 我很难使用枚举。