Код работает на моем локальном компьютере правильно, но когда он загружен на живой сервер на AWS EC2, соединение отклоняется.
Мы попытались снять защиту в целях тестирования на AWS EC2, и теперь функция работает.
Итак, мы подумали, что это может быть где-то в конфигурации безопасности AWS EC2 или в коде сервера Node, мы не совсем уверены.
Безопасность порта сервера Node (8001) разрешает только 1 конкретный IP-адрес, который является IP-адресом самого сайта (samplehostname.com), который пытается подключиться к серверу Node.
Безопасность сервера узла для запроса - мы разрешаем все (для тестирования):
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', "*:*");
res.header('Access-Control-Allow-Methods','GET');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
})
Журнал ошибок:
GET http://samplehostname.com:8001/socket.io/?
EIO=3&transport=polling&t=MWnX8e4 net::ERR_CONNECTION_REFUSED
Код Node.js:
var app = require('express')()
var server = require('http').Server(app)
var io = require('socket.io')(server)
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', "*:*");
res.header('Access-Control-Allow-Methods','GET');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
})
io.on('connect', function (socket) {
console.log(`Socket Connected ID: ${socket.id}`)
var Redis = require('ioredis')
var redis = new Redis({
host: 'localhost',
port: 1234,
password: 'samplepasswordhere',
})
redis.subscribe('(CHANNEL-HERE)')
redis.on("message", function (channel, message) {
var parsed_message = JSON.parse(message)
socket.emit(channel, parsed_message.data.data)
console.log(message)
})
})
var listener = server.listen(8001, ()=>{
console.log('Node Server Listening on port ' + listener.address().port)
});
Код Vue.js:
import io from 'socket.io-client'
...
beforeCreate () {
var socket = io(':8001', {secure: true})
socket.on('(CHANNEL-HERE)', function (data) {
vue.setPopulationData(JSON.parse(data))
})
}
...