Я разрабатывал это приложение NodeJS, которое использует функциональные возможности Laravel Echo для получения информации с сервера через сокетное соединение.
Серверный
Laravel Echo Server с Laravel 5.7.19
на стороне клиента
"laravel-echo": "^ 1.5.2"
"socket.io": "^ 2.2.0"
import Echo from '../../node_modules/laravel-echo/dist/echo.common.js'
import Socketio from 'socket.io-client';
let echo = new Echo({
broadcaster: 'socket.io',
host: 'https://smartfish.danymota.com:8080/',
encrypted: true,
secure: true,
client: Socketio,
auth: {
headers: {
'Authorization': 'Bearer ' + this.token.bearerToken,
},
},
});
echo.private('central.' + macAddress)
.listen('RulesUpdated', (response) => {
handleRules(JSON.parse(response.aquarios))
console.log(new Date().toLocaleString() + " - Rules updated")
})
Задача
В Http все работает нормально, когда я переключаюсь на HTTPS, он просто перестает работать. Кроме того, сокетное соединение не достигает сервера (или, по крайней мере, Laravel-echo-server не регистрирует его)
ВАЖНО - Что я пробовал
Запустил приложение через Browserify, а затем в браузере ( он отлично работает в браузере, даже с HTTPS )
Поиграл с разными портами (Опять же, он работает с HTTP, поэтому порты, скорее всего, не проблема)
Изменен URL на wss: //, /socket.io
Принудительное использование socket.io для защиты: true для параметров
Изменена версия Laravel Echo
Попытка импорта как echo.common.js, так и echo.js
Примечания
/ api / broadcasting / auth - Это работает, поэтому проблема, вероятно, не здесь
Настройка эхо-сервера Laravel
{
"authHost": "https://smartfish.danymota.com",
"authEndpoint": "/api/broadcasting/auth",
"clients": [{
"appId": "f7506b5e7118092c",
"key": "9015d93999f3a2f7f95a054a76fbcbfd"
}],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath1": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "8080",
"protocol": "https",
"socketio": {},
"sslCertPath": "/home/danymota/ssl/cert/smartfish.danymota.com.crt",
"sslKeyPath": "/home/danymota/ssl/private/smartfish.danymota.com.key",
"sslCertChainPath": "",
"sslPassphrase": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": true,
"allowOrigin": "http://smartfishweb.test/api",
"allowMethods": "GET, POST",
"allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
}
}
Отладка Socket.io
socket.io-client:url parse https://smartfish.danymota.com:8080/socket.io +0ms
socket.io-client new io instance for https://smartfish.danymota.com:8080/socket.io +0ms
socket.io-client:manager readyState closed +0ms
socket.io-client:manager opening https://smartfish.danymota.com:8080/socket.io +0ms
socket.io-client:manager connect attempt will timeout after 20000 +4ms
socket.io-client:manager readyState opening +1ms
socket.io-client:manager connect_error +60ms
socket.io-client:manager cleanup +0ms
Спасибо всем заранее.