当我将安全选项变为true时,我在订阅websocket服务器时遇到了问题。我运行了一个SSL验证器,以确保正确地设置了它,并确保一切都通过了。同时,为了安全起见,我也与我的主机提供商,所以我不相信这是问题。而且,当安全设置为false时,一切都会正常工作。
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
它似乎没有在_transport函数中设置_buildConnector()属性。我添加了一些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..
发布于 2014-03-06 22:13:58
我发现了一个名为node.js的wscat工具,它可以用来向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而不是my.ip.address。但这将导致Torquebox日志文件中出现以下错误:
NoSuchHostException: No such host: mydomain.com
因此,在torquebox.yml文件中,主机属性也需要配置为mydomain.com。
因此得出的结论是:在尝试连接到websocket服务器时,需要使用注册到SSL证书的域名,而不是外部ip地址。哇哈!
@bobmcwhirter,他帮助我找到了这个解决方案:https://github.com/projectodd/stilts/issues/20
https://stackoverflow.com/questions/22227337
复制相似问题