stomp nodejs在连接时不发送标头

Posted

技术标签:

【中文标题】stomp nodejs在连接时不发送标头【英文标题】:stomp nodejs not sending header on connect 【发布时间】:2015-03-06 14:37:08 【问题描述】:

我有一个超级简单的 nodejs 应用程序,它使用 stomp 连接到使用 websockets 的服务器。

问题是应用程序没有发送我告诉它发送的标头。关于如何发送标头的文档和示例再清楚不过了,所以我不知道为什么我没有在wireshark 中看到我的。

var Stomp = require('stompjs');
var client = Stomp.overWS('ws://localhost:8080/web/wsendpoint');

var headers = 
      login: 'mylogin',
      passcode: 'mypasscode',
      // additional header
      'Auth-Token': 'token'
    ;

client.connect(headers, connectCallback);

var connectCallback = function(frame) 
  alert('connected');
;

这可以正常连接,但标题似乎被忽略了。 有人知道这是为什么吗?

【问题讨论】:

【参考方案1】:

好消息是,您确实将标头发送到服务器。坏消息是,使用 DOC-proper 的代码如下:

client.connect(headers, connectCallback, errorCallback);

我收到了:

11 Mar 11:34:07 - server is connected to 127.0.0.1:8080
11 Mar 11:34:07 - 
    command: 'CONNECT',
    header: 
       login: '[object Object]',
       passcode: 'undefined',
       'accept-version': '1.1,1.0',
       'heart-beat': '10000,10000' ,
    body: '' 

清楚地表明,stompjs 正在登录字段中发送headers 对象。无论如何,通过您的代码,我可以看到一个正确的框架:

 command: 'CONNECT',
  header: 
   login: 'mylogin',
    passcode: 'mypasscode',
    'accept-version': '1.1,1.0',
    'heart-beat': '10000,10000' ,
  body: '' 

所以可能 - 我猜 - 有一个好的代码,你在你的 wireshark 中看到错误的(部分)包。一些线索可能在here。

我用于测试的是here。

【讨论】:

好吧,我已经在捕获的数据包中搜索了标头,但没有运气。搜索 url 是成功的,但是搜索“login”、“passcode”或“Auth-Token”没有结果。 尝试在包内容中搜索CONNECT,因为这是客户端发送到服务器进行协商的命令。之后的标题是几行,仍然在包内容中,并且因为您似乎连接正确,所以这个包是肯定发送的,您必须能够找到它。

以上是关于stomp nodejs在连接时不发送标头的主要内容,如果未能解决你的问题,请参考以下文章

如何使用NodeJS连接从请求中提取请求http标头

我如何限制发送到Stomp队列(处理websocket)的数据量,以便可以保证不会溢出缓冲区?

NodeJS回调成功时不打印输出

向非 Stomp/Websocket 消费者发送消息

stomp.py heartbeats 参数的函数

如何通过spring websocket STOMP向特定订阅发送消息?