2012-01-12 3 views
45

여기 내 문제가 있습니다 :두 개의 node.js 서버를 웹 소켓과 연결하는 방법은 무엇입니까?

저는 클라이언트 (웹 브라우저)와 통신하기 위해 node.js를 실행하고 socket.io를 사용하여 서버 A를 보유하고 있습니다. 이 모든 것이 훌륭하고 멋쟁이 답니다.

그러나 서버 B에 웹 소켓을 통해 서버 A에 연결해야하므로 벽에 부딪 혔습니다.

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

클라이언트 : 내가 발견 한 Node.js를 웹 소켓 클라이언트 중에 서버 A. 그래서

에 socket.io와 함께 작동하지 않습니다, 이것은 내가 위해 노력하고있어 경우입니다 -server socket.io를 통해 연결됩니다.

이제 서버 B (node.js 실행 중)가 websocket (포트 80을 통과하기 위해)을 통해 서버 A에 연결해야합니다. 하지만 ... 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.'); 
    }); 
}); 

고객이

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 websocket 클라이언트 중 내가 찾은 클라이언트가 무엇입니까? ' – Kato

+0

동일한 서버에 연결해야하므로 적어도 웹 소켓을 에뮬레이션해야합니다. – crappish

답변

22

밝혀졌습니다. 나는 오래된 예제를 사용하고 있습니다. 왜냐하면 어떤 이유로 든 제가 그것을 세 번 체크 했더라도. 글쎄.

또한 socket.io-client가 최신 Node (6.x.x)에서 깨졌습니다. 그것을 관리하고 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'); 
+0

새 예제를 게시하거나 해당 예제를 가리킬 수 있습니까? 나는 당신이 직면 한 똑같은 문제에 직면하고 있습니다. – Sudar

+0

불행히도 나는 어떤 링크도 저장하지 못했지만 작업 코드를보고 건너 뛰었습니다. 위의 답과 차이점을 발견했습니다. – crappish

+0

나는 또한 나의 코드 작업을 얻었다. 제 경우에는 포트를 지정하지 않았습니다. 포트를 추가 한 후 코드가 작동하기 시작했습니다. – Sudar

5

다음은 내가 작성한 코드예요. socket.io 1.0.6과 socket.io-client 1.0.6을 사용하고 있습니다. 이 경우는 다음과 같습니다.

서버 A (Socket.io 클라이언트) < ---> 서버 B (소켓.IO 서버)

서버 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 (클라이언트) : 클라이언트 만 서버에 8080 :

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

내가 로컬 호스트를 사용하고있는 경우 연결되지 않습니다. 미래의 사람들을 위해

+0

이 광고는 저에게 효과적입니다 ... –

7

: 여기
가 연결 보내고 서로간에 메시지를받을 socket.io를 사용이 매우 간단 Node.js 애플 리케이션입니다.

필수 패키지는 다음과 같습니다

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 + "'"); 
    }); 
}); 
관련 문제