Функция обновления данных в реальном времени работает локально, но не работает в режиме реального времени? Socket.io + Node.js + Vue.js + AWS EC2

Код работает правильно на моем локальном компьютере, но когда он загружается на рабочий сервер в AWS EC2, в соединении отказывается.

Мы попытались удалить защиту для тестирования на AWS EC2, и теперь функция работает.

Поэтому мы подумали, что это может быть где-то в конфигурации безопасности AWS EC2 или в коде сервера Node, мы не совсем уверены.

Безопасность порта сервера узла (8001) разрешает только 1 конкретный IP-адрес, который является IP-адресом самого сайта (samplehostname.com), который пытается подключиться к серверу узла.

Безопасность сервера узла для запроса - мы разрешаем все (для тестирования):

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.info(`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.info(message)
  })

})

var listener = server.listen(8001, ()=>{
    console.info('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))
    })
 }
 ...

Если у вас есть только ваш хост, авторизованный для подключения, это не сработает, потому что подключения к node выполняются с адреса браузера, а не с samplehostname.com. Он работает на вашем локальном компьютере, потому что каждое соединение является локальным. Хорошей практикой в ​​вашем случае было бы использование обратного прокси (nginx отлично справляется)

davidonet 09.01.2019 09:43

Не могли бы вы рассказать мне больше информации? в том, как это будет работать и как я могу это реализовать?

frost kazuma 09.01.2019 09:50

Здесь вы должны найти все, что вам нужно: nginx.com/blog/nginx-nodejs-websockets-socketio

davidonet 09.01.2019 09:52

Хорошо, я разберусь! Спасибо за помощь

frost kazuma 09.01.2019 09:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
126
0

Другие вопросы по теме