STOMP 网络套接字回调不起作用

Posted

技术标签:

【中文标题】STOMP 网络套接字回调不起作用【英文标题】:STOMP web socket callback doesn't work 【发布时间】:2016-05-04 04:42:48 【问题描述】:

我正在尝试使用 STOMP javascript Web 套接字连接到 mqtt 代理。建立连接。但是我代码中的回调函数没有被调用? 但是会发送 ping 消息。

我使用 url 作为主机地址。 这是我的代码。

<!DOCTYPE html>

<html>
<head>


  <script src="http://cdn.jsdelivr.net/sockjs/0.3.4/sockjs.min.js"></script>
  <script src="stomp.js"></script>

  <script>

var ws = new SockJS('http://108.567.234.143:9876/stomp');


var client = Stomp.over(ws);




client.connect('username', 'pw', connect_callback, on_error);


client.heartbeat.outgoing = 20000; // client will send heartbeats every 20000ms
client.heartbeat.incoming = 0;     // client does not want to receive heartbeats
                                   // from the server

var connect_callback = function() 

   alert("Connected to rabbitMQ");
var subscription = client.subscribe("CRICKET", subs_callback);
console.log('subscribe to CRICKET'); 
;

var on_error =  function(error) 
    console.log('error');
;

var    subs_callback = function(message) 
// called when the client receives a STOMP message from the server
if (message.body) 
  alert("got message with body " + message.body)
//console.log('got message with body' + message.body);
 else 
  alert("got empty message");

;


console.log('message.body');


</script>


</head>

<body> 


hello world



</body>
</html>  

我无法订阅主题。请告诉我有什么问题吗? Here is the console log

谢谢

【问题讨论】:

谁能找出问题所在? 会不会是因为你定义了回调函数,在你使用之后呢?尝试在函数定义后放置client.connect('username', 'pw', connect_callback, on_error); 非常感谢 Akum...它成功了.... 太棒了,我会添加它作为答案 【参考方案1】:

回调在使用后被定义。

很可能.connect() 函数默默地忽略了未定义的函数,所以您没有看到任何错误。

.connect() 移到定义回调之后,应该可以解决问题。

var ws = new SockJS('http://108.567.234.143:9876/stomp');


var client = Stomp.over(ws);


client.heartbeat.outgoing = 20000; // client will send heartbeats every 20000ms
client.heartbeat.incoming = 0;     // client does not want to receive heartbeats
                                   // from the server

var connect_callback = function() 

   alert("Connected to rabbitMQ");
var subscription = client.subscribe("CRICKET", subs_callback);
console.log('subscribe to CRICKET'); 
;

var on_error =  function(error) 
    console.log('error');
;

var    subs_callback = function(message) 
// called when the client receives a STOMP message from the server
if (message.body) 
  alert("got message with body " + message.body)
//console.log('got message with body' + message.body);
 else 
  alert("got empty message");

;


client.connect('username', 'pw', connect_callback, on_error);


console.log('message.body');

【讨论】:

作为补充,因为人们可能会发现它很有用。如果您将回调函数定义为function connect_callback() ... 而不是var connect_callback = function() ...,那么它将以任何顺序工作。这是由于提升,浏览器将首先加载文件中的所有功能。

以上是关于STOMP 网络套接字回调不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 sock.js 上使用 stomp.js 和 ActiveMQ-Apollo 似乎不起作用

网络上的Python套接字ipv6不起作用

iOS 14 Cordova Chrome 套接字绑定不起作用

FBSDKSharingDelegate 回调不起作用,即使发布工作正常

Swift 回调不起作用

jQuery 地址在回调中不起作用