Как подключить два сервера node.js с помощью веб -питания?

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

  •  27-10-2019
  •  | 
  •  

Вопрос

Вот моя проблема:

У меня есть сервер A, запуск node.js и использование Socket.io для общения с клиентами (веб -браузеры). Все это работает нормально и тщательно.

Тем не менее, теперь, когда у меня есть сервер B, который также должен подключиться к серверу через веб -сайты, я нажимал на стену. Ни один из клиентов Node.js WebSocket, которых я нашел, не будет работать с Socket.io на сервере A.

Итак, это так, к чему я стремлюсь:

.--------.      .----------.      .----------.
| CLIENT | <--> | SERVER A | <--> | SERVER B |
'--------'      '----------'      '----------'

Клиент-сервер соединение выполняется через socket.io

Теперь сервер B (работающий node.js) должен подключаться к серверу через WebSocket (чтобы пройти через порт 80). Но...

Даже пример кода в модуле socket.io-client не работает ...:/

// Connect to server
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected.');
});

Код просто проходит без каких -либо ошибок, а выполнение заканчивается через несколько секунд.

Обновление: образцы кода

Сервер (который работает отлично) выглядит так:

// Load requirements
var http = require('http'),
    io = require('socket.io');

// Create server & socket
var server = http.createServer(function(req, res){

    // Send HTML headers and message
    res.writeHead(404, {'Content-Type': 'text/html'});
    res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);

// Add a connect listener
io.sockets.on('connection', function(socket) { 

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() {
        console.log('Client disconnected.');
    });
});

Клиент выглядит так

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected!');
});

console.log('3');

1, 2 и 3 печатают просто отлично, без ошибок, и через несколько секунд процесс просто выходит

Кроме того, сервер A ничего не выводит в журнал, хотя у меня есть набор журналов Socket.io на «Все».

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

Решение

Оказывается, я использовал старые примеры, по какой -то причине, хотя я тройной проверил их. Ну, доми.

Кроме того, выяснилось, что Socket.io-client сломан на последнем узле (6.xx). Удалось найти обновление от GitHub для него, заменил файлы и ура, все работает!

Редактировать: К сожалению, я не сохранил никаких ссылок на рабочие примеры, но после быстрого просмотра кода кажется, что единственные изменения были для клиентского кода, что теперь выглядит так:

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = io.connect('localhost:8080', {reconnect: true});

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected!');
});

console.log('3');

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

Для будущих людей:
Вот 2 очень просто Node.js приложения, которые используют сокет.io Чтобы подключиться, отправлять и получать сообщения между собой.

Требуемый пакет:

npm install socket.io

Node-App-1 server.js:

var io = require('socket.io').listen(3000);
io.on('connection', function (socket) {
    console.log('connected:', socket.client.id);
    socket.on('serverEvent', function (data) {
        console.log('new message from client:', data);
    });
    setInterval(function () {
        socket.emit('clientEvent', Math.random());
        console.log('message sent to the clients');
    }, 3000);
});

Node-App-2 client.js:

var io = require('socket.io-client');
var socket = io.connect("http://localhost:3000/", {
    reconnection: true
});

socket.on('connect', function () {
    console.log('connected to localhost:3000');
    socket.on('clientEvent', function (data) {
        console.log('message from the server:', data);
        socket.emit('serverEvent', "thanks server! for sending '" + data + "'");
    });
});

Вот фрагмент кода, который я написал, он использует Socket.io 1.0.6 и Socket.io-client 1.0.6. Дело приведено следующим:

Сервер A (Cocket.io Client) <----> Сервер B (Socket.io Server)

Сервер B (сервер):

// Load requirements
var http = require('http'),
io = require('socket.io');

// Create server & socket
var server = http.createServer(function(req, res)
{
  // Send HTML headers and message
  res.writeHead(404, {'Content-Type': 'text/html'});
  res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);

// Add a connect listener
io.sockets.on('connection', function(socket)
{
  console.log('Client connected.');

  // Disconnect listener
  socket.on('disconnect', function() {
  console.log('Client disconnected.');
  });
});

Сервер A (клиент):

console.log('1');
// Connect to server
var io = require('socket.io-client');
var socket = io.connect('http://localhost:8080', {reconnect: true});

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) { 
  console.log('Connected!');
});

console.log('3');

Если я использую Localhost: 8080 только на клиентском сервере, он не подключается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top