关于报错,Whoops! Lost connection to ws://XXX.XXX.XXX.XXX:15684/ws
在玩rabbitMQ时候,用stompJS从web连接ranbbitMQ时,报了标题的错误消息!
我把我这个html页面代码贴上
最主要的是这两个参数
client.heartbeat.outgoing =8000;// 毫秒
client.heartbeat.incoming =8000;// 毫秒
这两个参数, 填0是不行的, 0代表永不发送心跳包. Rabbitmq服务需要心跳包来维持正常状态.
填的数值太大也不行. 发送时间太长,导致服务器端认为连接已断开. 服务器端会主动断开连接 .
所以正确方式是在, 服务器主动断开之前发送一个心跳包. 这个时间不要超过服务器默认的自动断开连接时长. 服务器默认好像是10秒断开. 可以自己用秒表测试一下.
<html><head><title>WebSocket</title><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"></head><body><divid="main"style="width: 200px;height: 200px;background-color: antiquewhite;"><divid="message"></div></div></body><scriptsrc="./js/jquery.js"></script><!-- stomp协议的客户端脚本 --><scriptsrc="./js/stomp.js"></script><!-- SockJS的客户端脚本 --><scriptsrc="./js/sockjs.js"></script><scripttype="text/javascript">/**
/queue/queuename:使用默认转发器订阅/发布消息,默认由stomp自动创建一个持久化队列
/amq/queue/queuename:与/queue/queuename的区别在于队列不由stomp自动进行创建,队列不存在失败
/topic/routing_key:通过amq.topic转发器订阅/发布消息,订阅时默认创建一个临时队列,通过routing_key与topic进行绑定
/temp-queue/xxx:创建一个临时队列(只能在headers中的属性reply-to中使用),可用于发送消息后通过临时队列接收回复消息,接收通过client.onreceive
/exchange/exchangename/[routing_key]:通过转发器订阅/发布消息,转发器需要手动创建
client.subscribe(destination,callback,headers) :订阅消息
client.send(destination,headers,body):发布消息
client.unsubscribe(id):取消订阅,id为订阅时返回的编号
client.onreceive:默认接收回调从临时队列获取消息
*/var ws =newWebSocket('ws://192.168.1.123:15674/ws');// 获得Stomp client对象var client = Stomp.over(ws);// SockJS does not support heart-beat: disable heart-beats
client.heartbeat.outgoing =8000;
client.heartbeat.incoming =8000;/*如果
client.heartbeat.outgoing = 2000;
client.heartbeat.incoming = 2000;
设置的太大, 会因为websocket本身的超时时间而自动关闭, 所以这里建议设置的不要太长. 最好是10秒以内.
*/// 定义连接成功回调函数varon_connect=function(x){//data.body是接收到的数据
client.subscribe("/topic/E.WebAPI.ImageIsTakeV2.#",function(data){var msg = data.body;
console.log("收到数据:"+ msg);//$("#message").append("收到数据:" + msg);});};// 定义错误时回调函数varon_error=function(){
console.log('error');};// 连接RabbitMQ
client.connect('root','123455', on_connect, on_error,'/');
ws.onclose=function(e){
console.log(e);}
console.log(">>>连接上http://192.168.1.123:15674");/*
setInterval(function(){
console.log("ws发送心跳");
ws.send('\r\n');//防止websocket自动close
},2000)
*/</script></html>
版权归原作者 走错路的程序员 所有, 如有侵权,请联系我们删除。