2014-03-06 105 views
1

當我將安全選項設置爲true時,我遇到了訂閱我的websocket服務器的問題。我運行了一個SSL驗證器,以確保它已正確設置並且一切都通過了。爲了安全起見,我還檢查了我的託管服務提供商,所以我不認爲這是問題。而且,當安全設置爲false時,所有內容都可以工作。Stilts.js無法連接到安全真正的websocket服務器

WSS正在端口8676上運行,並且確實確認該端口已打開。

我正在使用Stomp Javascript庫。我從他們的github主分支(https://github.com/projectodd/stilts/blob/master/stomp-client-js/src/main/javascript/stomp.js)下載了最新版本。

我不斷收到_transmit()函數內部此錯誤:can't call transmit on undefined

這似乎不被設置_buildConnector()函數內的_transport財產。我添加了一些console.logs,並且它總是使用此函數中的else語句。

修復的任何想法?或者我只是想念一些東西?

這是我如何初始化我的連接:

client = new Stomp.Client('my.ip.address', 8676, true);

這裏是我記錄了一些功能:

Stomp.Client = function(host, port, secure) { console.log('host param: ' + host); console.log('port param: ' + port); console.log('secure param: ' + secure); this._host = host || Stomp.DEFAULT_HOST; this._port = port || Stomp.DEFAULT_PORT || 8675; this._secure = secure || Stomp.DEFAULT_SECURE_FLAG || false; console.log('this._host: ' + this._host); console.log('this._port: ' + this._port); console.log('this._secure: ' + this._secure); }

輸出:

host param: my.ip.address port param: 8676 secure param: true this._host: my.ip.address this._port: 8676 this._secure: true

_buildConnector: function(transports, i) { console.log('INSIDE _buildConnector()'); var callback = this._connectCallback; var client = this; if (i < transports.length) { console.log('IF!!!'); return function() { var fallback = client._buildConnector(transports, i+1, callback); try { console.log('_buildConnector::IF::TRY'); transports[i].connect(function() { client._transport = transports[i]; callback(); }, fallback); } catch (err) { console.log('_buildConnector::IF::CATCH'); fallback(); } }; } else { console.log('_buildConnector::ELSE'); return client.connectionFailed.bind(this); } }

輸出:

INSIDE _buildConnector() IF!!! INSIDE _buildConnector() IF!!! _buildConnector::IF::TRY INSIDE _buildConnector() _buildConnector::ELSE _buildConnector::IF::TRY

connectionFailed: function() { console.log('INSIDE connectionFailed()'); if (this._errorCallback) { console.log('connectionFailed::IF'); console.log('this._errorCallback'); console.log(this._errorCallback); console.log('arguments'); console.log(arguments); this._errorCallback.apply(this._errorCallback, arguments); } else { console.log('connectionFailed::ELSE'); console.log('unable to connect :('); Stomp.logger.log("unable to connect"); } }

輸出: No output..

+0

也要注意的是,Web應用程序服務器和WebSocket的服務器都在兩臺不同的機器。不知道這是否是問題的一部分。 – ggrillone

+0

我試着將websocket服務器移動到與web應用程序相同的機器上,但仍然沒有運氣 – ggrillone

回答

0

我發現了這個名爲wscat的node.js工具,它可以用來將消息發送到websocket服務器(http://einaros.github.io/ws/)。

當使用外部地址輸入以下命令: wscat -c wss://my.ip.address:8676

我一直得到以下錯誤:error: Error: Hostname/IP doesn't match certificate's altnames

但是當我把它改成我的域名: wscat -c wss://mydomain.com:8676

我得到此消息:connected (press CTRL+C to quit)

這導致我:

我將Javascript中的主機值設置爲STOMP所在服務器的外部IP地址。但SSL證書是爲域名配置的。這導致我認爲我應該使用mydomain.com而不是my.ip.address作爲new Stomp.Client中的主機參數。但是,這導致在Torquebox日誌文件中出現以下錯誤:

NoSuchHostException: No such host: mydomain.com

所以後來在torquebox.yml文件所需的主機屬性進行配置,以mydomain.com爲好。

所以得出的結論是:當您嘗試連接到您的websocket服務器時,您需要使用註冊到SSL證書的域名,而不是外部IP地址。好哇!

感謝:@bobmcwhirter誰幫助使我這個解決方案在這裏:https://github.com/projectodd/stilts/issues/20