Функция обновления данных в реальном времени работает на локальном компьютере, но не работает на живом? Socket.io + Node.js + Vue.js + AWS EC2 - PullRequest
0 голосов
/ 09 января 2019

Код работает на моем локальном компьютере правильно, но когда он загружен на живой сервер на 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))
    })
 }
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...