두 개의 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
'Programing' 카테고리의 다른 글
Visual Studio에서 솔루션 탐색기의 배경색 변경 (0) | 2020.12.26 |
---|---|
소켓 오류에서 더 이상 읽을 데이터가 없습니다. (0) | 2020.12.26 |
큰 Shiny 앱을 구성하는 방법은 무엇입니까? (0) | 2020.12.26 |
Team Foundation Server-기록과 함께 소스 이동 (0) | 2020.12.26 |
ASP.NET MVC에 JSON 데이터 게시 (0) | 2020.12.26 |