2012-01-12 4 views
45

Вот моя проблема:Как подключить два сервера node.js с websockets?

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

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

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

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

Client -сервер Подключение осуществляется через socket.io

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

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

// 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.'); 
    }); 
}); 

Client выглядит следующим образом

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, установленная на «все».

+1

Вы определенно клиент веб-сайтов или можете использовать простые старые сокеты? – maerics

+0

'узлы веб-узла node.js, которые я нашел, какие? – Kato

+0

Мне нужно хотя бы эмулировать веб-порты, так как мне нужно подключиться к тому же серверу. – crappish

ответ

22

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

Также выяснилось, что socket.io-клиент разбит на последнем узле (6.x.x). Удалось найти обновление от github, заменив файлы и yay, все работает!

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

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'); 
+0

Можете ли вы опубликовать новые примеры или указать на них? Я столкнулся с той же проблемой, с которой вы столкнулись. – Sudar

+0

К сожалению, я не сохранял никаких ссылок, но я просмотрел рабочий код, и я обновлю разницу, я нашел ответ выше. – crappish

+0

Я также получил свой код. В моем случае я не указал порт. Код начал работать после добавления порта. – Sudar

5

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

Сервер A (клиент Socket.io) < ---> Сервер B (гнездо.И.О. Server)

сервер B (Server):

// 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.'); 
    }); 
}); 

Сервер (Client):

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 только на сервере клиента он не соединяется.

+0

это сработало для меня ... –

7

Для будущих людей:
Здесь 2 очень простые Node.js приложения, которые используют socket.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 + "'"); 
    }); 
}); 
Смежные вопросы