2012-01-12 45 views
45

Đây là vấn đề của tôi:Làm cách nào để kết nối hai máy chủ node.js với ổ cắm web?

Tôi có máy chủ A, đang chạy node.js và sử dụng socket.io để liên lạc với khách hàng (trình duyệt web). Tất cả điều này đang chạy tốt và dandy.

Tuy nhiên, bây giờ tôi có máy chủ B, cũng cần kết nối với máy chủ A thông qua ổ cắm web, tôi đã nhấn vào tường. Không ai trong số các khách hàng WebSocket Node.js tôi đã tìm thấy sẽ không làm việc với các socket.io trên máy chủ A.

Vì vậy, đây là trường hợp tôi đang phấn đấu để:

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

Khách hàng -server Một kết nối được thực hiện thông qua socket.io

Bây giờ, Máy chủ B (chạy node.js) phải kết nối với máy chủ A qua websocket (để đi qua cổng 80). Nhưng ...

Ngay cả những mã ví dụ trong mô-đun socket.io-client không hoạt động ...:/

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

Mã này chỉ cần vượt qua mà không cần bất kỳ sai sót và thực hiện kết thúc sau vài giây.

Cập nhật: Mã mẫu

Server (mà chỉ hoạt động tốt) trông như thế này:

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

Khách hàng trông như thế này

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 và 3 in ra tốt , không có lỗi và vài giây sau quy trình này chỉ thoát ra

Ngoài ra, máy chủ A không xuất bất cứ thứ gì vào nhật ký, mặc dù tôi đã ghi nhật ký socket.io trên "mọi thứ".

+1

Bạn có chắc chắn là một khách hàng sử dụng ổ cắm web hoặc bạn có thể sử dụng ổ cắm cũ đơn giản không? – maerics

+0

'khách hàng websocket node.js tôi đã tìm thấy' cái nào? – Kato

+0

Tôi cần ít nhất mô phỏng các ổ cắm web vì tôi cần kết nối với cùng một máy chủ. – crappish

Trả lời

22

Hóa ra tôi đã sử dụng các ví dụ cũ, vì một lý do nào đó, mặc dù tôi đã kiểm tra ba lần. Vâng, doh.

Ngoài ra, hóa ra là socket.io-client bị hỏng trên Node mới nhất (6.x.x). Quản lý để tìm một bản cập nhật từ github cho nó, thay thế các tập tin và yay, mọi thứ đều hoạt động!

Sửa: Đáng tiếc là tôi không lưu bất kỳ liên kết đến các ví dụ làm việc nhưng sau khi nhanh chóng lướt qua các mã có vẻ như rằng những thay đổi duy nhất là vào mã khách hàng, mà bây giờ trông như thế này:

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

Bạn có thể đăng các ví dụ mới hoặc chỉ cho họ? Tôi đang đối mặt với chính xác cùng một vấn đề mà bạn đang phải đối mặt. – Sudar

+0

Rất tiếc, tôi không lưu bất kỳ liên kết nào nhưng tôi đã lướt qua mã làm việc và tôi sẽ cập nhật sự khác biệt mà tôi đã tìm thấy cho câu trả lời ở trên. – crappish

+0

Tôi cũng nhận được mã của mình. Trong trường hợp của tôi, tôi đã không chỉ định cổng. Mã này bắt đầu hoạt động sau khi tôi thêm cổng. – Sudar

5

Đây là đoạn mã tôi viết, nó sử dụng socket.io 1.0.6 và socket.io-client 1.0.6. Trường hợp như sau:

Máy chủ A (Máy khách Socket.io) < ---> Máy chủ B (Ổ cắm.io Server)

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

máy chủ A (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'); 

Nếu tôi đang sử dụng localhost: 8080 chỉ trên máy chủ của khách hàng nó không kết nối.

+0

điều này làm việc cho tôi ... –

7

Đối với những người trong tương lai:
Đây là 2 rất đơn giản Node.js ứng dụng sử dụng socket.io để kết nối, gửi và nhận tin nhắn giữa mỗi khác.

buộc gói là:

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 + "'"); 
    }); 
}); 
Các vấn đề liên quan