Programing

두 개의 node.js 서버를 웹 소켓과 연결하는 방법은 무엇입니까?

lottogame 2020. 12. 26. 09:25
반응형

두 개의 node.js 서버를 웹 소켓과 연결하는 방법은 무엇입니까?


내 문제는 다음과 같습니다.

나는 node.js를 실행하고 클라이언트 (웹 브라우저)와 통신하기 위해 socket.io를 사용하는 서버 A를 가지고 있습니다. 이 모든 것이 잘 돌아가고 있습니다.

그러나 이제 웹 소켓을 통해 서버 A에 연결해야하는 서버 B가 있으므로 벽에 부딪 혔습니다. 내가 찾은 node.js 웹 소켓 클라이언트는 서버 A의 socket.io와 함께 작동하지 않습니다.

그래서 이것이 내가 노력하고있는 경우입니다.

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

클라이언트-서버 연결은 socket.io를 통해 이루어집니다.

이제 서버 B (node.js 실행)는 웹 소켓을 통해 서버 A에 연결해야합니다 (포트 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은 오류없이 잘 인쇄되며 몇 초 후에 프로세스가 종료됩니다.

또한 "everything"에 socket.io 로깅이 설정되어 있어도 서버 A는 로그에 아무것도 출력하지 않습니다.


세 번 확인했지만 어떤 이유로 든 오래된 예제를 사용하고있었습니다. 음,도.

또한 최신 노드 (6.xx)에서 socket.io-client가 손상되었습니다. 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');

미래의 사람들을 위해 : 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 + "'");
    });
});

다음은 내가 작성한 코드 스 니펫이며 socket.io 1.0.6 및 socket.io-client 1.0.6을 사용하고 있습니다. 사례는 다음과 같습니다.

서버 A (Socket.io 클라이언트) <---> 서버 B (Socket.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 (클라이언트) :

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을 사용하는 경우 연결되지 않습니다.

참조 URL : https://stackoverflow.com/questions/8837236/how-to-connect-two-node-js-servers-with-websockets

반응형