При подключении к серверу Crossbar с помощью JavaScript возникает ошибка "Соединение с другой стороной было потеряно некорректно".
Я пытался создать простое приложение на основе WAMP RPC с использованием Autobahn(JavaScript) и Crossbar. Скрипт не работает как в защищенных, так и в незащищенных соединениях.
Перекладина
config.json
:-
{
"$schema": "https://raw.githubusercontent.com/crossbario/crossbar/master/crossbar.json",
"version": 2,
"controller": {
},
"workers": [
{
"type": "router",
"realms": [
{
"name": "name_1",
"roles": [
{
"name": "anonymous",
"permissions": [
{
"uri": "",
"match": "prefix",
"allow": {
"call": true,
"register": true,
"publish": true,
"subscribe": true
},
"disclose": {
"caller": false,
"publisher": false
},
"cache": false
}
]
}
]
}
],
"transports": [
{
"type": "websocket",
"endpoint": {
"type": "tcp",
"port": 8080,
"tls": {
"key": "path/to/letsencrypt/keys/privkey.pem",
"certificate": "path/to/letsencrypt/keys/cert.pem",
"chain_certificates": ["path/to/letsencrypt/keys/chain.pem"],
"ca_certificates": [
"isrgrootx1.pem",
"letsencryptauthorityx1.pem",
"letsencryptauthorityx2.pem"
],
"ciphers": "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS"
}
},
"url": "wss://[domain]",
"serializers": ["json"],
"auth": {
"ticket": {
"type": "static",
"principals": {
"user_1": {
"ticket": "ticket_1",
"role": "anonymous"
}
}
}
},
"options": {
"allowed_origins": ["*"],
"allow_null_origin": true,
"enable_webstatus": true,
"max_frame_size": 1048576,
"max_message_size": 1048576,
"auto_fragment_size": 65536,
"fail_by_drop": true,
"open_handshake_timeout": 2500,
"close_handshake_timeout": 1000,
"auto_ping_interval": 10000,
"auto_ping_timeout": 5000,
"auto_ping_size": 4,
"compression": {
"deflate": {
"request_no_context_takeover": false,
"request_max_window_bits": 13,
"no_context_takeover": false,
"max_window_bits": 13,
"memory_level": 5
}
}
}
},
{
"type": "websocket",
"endpoint": {
"type": "tcp",
"port": 8081
},
"url": "ws://[domain]",
"serializers": ["json"],
"options": {
"allowed_origins": ["*"],
"allow_null_origin": true,
"enable_webstatus": false,
"max_frame_size": 1048576,
"max_message_size": 1048576,
"auto_fragment_size": 65536,
"fail_by_drop": true,
"open_handshake_timeout": 2500,
"close_handshake_timeout": 1000,
"auto_ping_interval": 10000,
"auto_ping_timeout": 5000,
"auto_ping_size": 4,
"compression": {
"deflate": {
"request_no_context_takeover": false,
"request_max_window_bits": 13,
"no_context_takeover": false,
"max_window_bits": 13,
"memory_level": 5
}
}
}
}
]
}
]
}
JavaScript:-
var connection=null;
AUTOBAHN_DEBUG = true;
require.config({
baseUrl: ".",
paths: {
"autobahn":
"https://[domain]/path/to/autobahn.min.js",
"when": "https://cdnjs.cloudflare.com/ajax/libs/when/2.7.1/when"
},
shim: {
"autobahn": {
deps: ["when"]
}
}
});
require(["autobahn"], function(autobahn) {
console.log("Ok, Autobahn loaded", autobahn.version);
var connection = new autobahn.Connection({
transports: [{
type: 'websocket',
port: '8080',
host: '[domain]',
url: "wss://[domain]:8080",
}],
realm: "name_1",
max_retries: "0"
});
connection.onopen = function (session, details) {
// Publish, Subscribe, Call and Register
// session.register('com.myapp.add2', add2);
// session.call('com.myapp.add2', [2, 3]).then(function showSum(res) {
// console.log('sum is', res);
// }, session.log);
console.log("Connection opened.");
};
connection.onclose = function (reason, details) {
console.log("Connection closed.");
}
connection.open();
});
Трассировка крестовины для безопасного соединения: -
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] connection accepted from peer tcp4:[ip_address]:6589
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] Connection made to tcp4:[ip_address]:6589
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] Connection to/from tcp4:[ip_address]:6589 was lost in a non-clean fashion: Connection to the other side was lost in a non-clean fashion: Connection lost.
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] _connectionLost: [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionLost'>: Connection to the other side was lost in a non-clean fashion: Connection lost.
Журнал консоли JavaScript для безопасного подключения: -
autobahn.min.js:90 trying to create WAMP transport of type: websocket
autobahn.min.js:90 using WAMP transport type: websocket
autobahn.min.js:181 WebSocket connection to 'wss://[domain]:8080/' failed: WebSocket opening handshake was canceled
autobahn.min.js:87 connection closed unreachable {reason: null, message: null, retry_delay: null, retry_count: null, will_retry: false}
main.js:43 Connection closed.
Коды Crossbar и Javascript для незащищенного соединения одинаковы, за исключением того, что порт
8081
и изменение
wss
к
ws
.
Трассировка поперечной полосы для незащищенного соединения: -
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] connection accepted from peer tcp4:[ip_address]:7110
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] Connection made to tcp4:[ip_address]:7110
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] dropping connection to peer tcp4:[ip_address]:7110 with abort=True: WebSocket opening handshake timeout (peer did not finish the opening handshake in time)
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] Connection to/from tcp4:[ip_address]:7110 was aborted locally
[Router 32589 crossbar.router.protocol.WampWebSocketServerProtocol] _connectionLost: [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionAborted'>: Connection was aborted locally using ITCPTransport.abortConnection.
Журнал консоли JavaScript для незащищенного соединения: -
autobahn.min.js:90 using WAMP transport type: websocket
autobahn.min.js:181 WebSocket connection to 'ws://[domain]:8081/' failed: Error in connection establishment: net::ERR_CONNECTION_RESET
autobahn.min.js:87 connection closed unreachable {reason: null, message: null, retry_delay: null, retry_count: null, will_retry: false}
main.js:43 Connection closed.
Изначально у меня в конфиге Crossbar не было сертификатов CA (без изменений ошибок). Я решил, что должен добавить их, потому что это может иметь какое-то отношение к этому, поэтому я получил их с https://letsencrypt.org/2015/06/04/isrg-ca-certs.html (не уверен, что это правильно). Также пробовал с https://letsencrypt.org/certificates/, но это взлетело у меня в голове (что мне вообще нужно?).
Я не уверен, что вызывает эти проблемы в любом из случаев сейчас или я что-то упускаю. Эти документы являются хромым в лучшем случае.
Помоги пожалуйста?