Пропустите номер порта на страницу, загруженную в node.js/socket.io

StackOverflow https://stackoverflow.com/questions/8304205

  •  25-10-2019
  •  | 
  •  

Вопрос

Хорошо, у меня есть простой тестовый сервер, настроенный с использованием socket.io в node.js. Моя цель - запустить один и тот же сервер на нескольких разных портах, чтобы проверить некоторые сбалансированные условия нагрузки и тесты на синхронизацию.

Вот как выглядит сервер:

var app = require('http').createServer(handler),
      io = require('socket.io').listen(app),
      fs = require('fs'),
      port = process.argv[1]; // listen on port number passed via command line

app.listen(port);

function handler (req, res) {
   console.log('request', {remotePort: req.connection.remotePort, remoteAddress: req.connection.remoteAddress, url: req.url});
   // how do I pass the port number here?
   fs.readFile(__dirname + '/chat.html',
         function (err, data) {
            if (err) {
               res.writeHead(500);
               return res.end('Error loading chat.html');
            }

            res.writeHead(200);
            res.end(data);
         });
}

io.sockets.on('connection', function (socket) {
   // do chatty stuff
});

Вопрос в том, как самый простой способ доставить номер порта в чат.html (см. Комментарий в коде выше)? Есть ли способ сделать это с узлом или FS? Мне нужно выразить настройку с шаблонами?

Интересно, какой узел позволит мне сделать со строкой запроса; Могу ли я просто засунуть там порт и выбрать его с помощью jQuery после загрузки страницы?

Заранее спасибо!

Это было полезно?

Решение

HTML для статического содержимого. Таким образом, вы не можете использовать для динамического содержимого. Настолько простой способ использования шаблонов, таких как EJS, Jade и JQUERY Template.

Но вы не хотите, чтобы вы могли изменить содержимое с чата .html

function(err, data) {
  data = data.replace() // like this
}

Я не рекомендую таким образом.

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

Это старый вопрос, но решил ответить на него с более подходящим ответом.

Поскольку вы слушаете один и тот же порт как на http, так и на socket.io, вы можете просто изменить сценарий на клиенте, чтобы подключиться к тому же адресу, что и веб -страница, как так:

var socket = io.connect(window.location.href);

Если бы сервер был просто обычным сервером WebSocket, вы могли бы сделать вместо этого:

var socket = new WebSocket(window.location.href.replace('http', 'ws'));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top