Я новичок во многих подобных вещах и пытаюсь понять это.
У меня есть размещенный домен по адресу <my.domain.com>
. Я размещаю игру по этому адресу, и пользователи могут go по этому адресу, и игра загружается для них в браузере.
На том же сервере я запускаю Express nodejs (мы вызовите этот HTTP SERVER
) сервер для получения HTTP-запросов.
Также на том же сервере я запускаю сервер сокетов с использованием библиотеки Socket.io (мы назовем эту SOCKET SERVER
) библиотекой.
HTTP SERVER
могут подключаться к SOCKET SERVER
через localhost:<port>
, и они могут обмениваться данными. Я могу отправлять запросы со своего мобильного устройства на HTTP SERVER
, который пересылает эти запросы на SOCKET SERVER
и получаю ответ на мобильном устройстве.
Моя проблема теперь в том, что мне нужно создать другое соединение с SOCKET SERVER
из моей размещенной игры на <my.domain.com>
. Однако, когда я пытаюсь подключиться к localhost:<port>
, как это делаю с HTTP SERVER
, я получаю ошибку ERR_CONNECTION_REFUSED. Я предполагаю, что это связано с другим именем хоста. Я пытался добавить
app.use(function(req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
});
, но это, похоже, не помогает. Я не совсем уверен, где go отсюда.
Приложение Socket server. js
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
});
server.listen(8082);
io.on('connection', (socket) => {
console.log(`Socket server 'connection' event`);
});
Код в HTTP SERVER
, который правильно подключается и отправляет / получает сообщения
var socket = require('socket.io-client')('http://localhost:8082');
socket.on('connect', () => {
console.log(`HTTP server - 'connect' event to socket server`);
});
Это файл javascript, который игра загружает как надстройку. Хуки предоставляются игрой как EventEmitter. У меня нет прямого доступа к HTML страницам, отображаемым в игре, хотя я могу управлять ими с помощью этого javascript файла надстройки.
let socket;
// a game hook when it's initialized
Hooks.on("init", function() {
// don't have direct access to game pages, so create a script tag and load
// the socket.io client library
const scriptRef = document.createElement('script');
scriptRef.setAttribute('type', 'text/javascript');
scriptRef.setAttribute('onload', 'window.socketLibraryLoaded()');
scriptRef.setAttribute('src', 'https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js');
document.getElementsByTagName('head')[0].appendChild(scriptRef);
});
// handler for when library is loaded
window.socketLibraryLoaded = () => {
log('Socket library loaded');
// i assume this address is wrong since the host of the game is <my.domain.com> and it's trying to connect to localhost
socket = io('https://localhost:8082');
socket.on('connect', () => {
log('Connected to socket server');
});
socket.on('connect_error', error => {
log(error);
});
}