2017-11-29 7 views
0

외부 도메인에서 내 node.js 서버에 연결할 수없는 데 문제가 있습니다. 노드를 통해 http 웹 서버를 사용하여 로컬에서 실행하면 외부에서 연결할 때 socket.io.js 파일이 잘로드되지만 소켓을 사용하려고하면 URL에서 포트가 제거되어 연결할 수 없습니다.클라이언트가 socket.io를 사용하여 서버에 연결할 수 없습니다.

대신 네트워크 요청에이 일을 :

http://external-domain.com:3000/socket.io/?EIO=3&transport=polling&t=M06GOUU

는 않습니다이 :

http://external-domain.com/socket.io/?EIO=3&transport=polling&t=M06GOUU

나는 그것이에서 포트를 제거 할 수 있도록하는 방법을 잘 모르겠어요 연결. 이 문제를 해결하려면 어떻게해야합니까?

SERVER

const path = require('path'); 
const http = require('http'); 
const express = require('express'); 
const socketIO = require('socket.io'); 

const publicPath = path.join(__dirname, '../public'); 
var app = express(); 
var server = http.createServer(app); 
var io = socketIO(server); 

app.use(express.static(publicPath)); 

server.listen(3000,() => { 
    console.log(`Server is up on port 3000`); 
}); 

CLIENT 스크립트 TAG 다른 도메인 ON

<script src="http://external-domain.com:3000/socket.io/socket.io.js"></script> 

CLIENT JS

var socket = io(); 

socket.connect('http://external-domain.com:3000'); 

socket.on('connect', function() { 
    console.log('Connected to server.'); 
}); 

답변

3

변경을 이리저리 m이 :

var socket = io(); 
socket.connect('http://external-domain.com:3000'); 

그냥이 : 이미 io("http://external-domain.com:3000"); 전화와의 연결을 요청한 것 같은

var socket = io("http://external-domain.com:3000"); 

그리고, 당신은 socket.connect()를 사용하지 않습니다.


설명

코드 :

var socket = io(); 

그 기원에 socket.io 서버에 연결하는 페이지의 URL을 사용합니다. 그것은 당신이 원하는 것 (분명히)이 아닙니다. 당신이 .connect() 방법을 사용하고 싶다면

,이 같은 것 :

var socket = io.connect("http://external-domain.com:3000"); 

참고 : var socket = io(url) 단순히 var socket = io.connect(url)에 대한 바로 가기입니다.

socket.connect() URL을 매개 변수로 허용하지 않으므로 올바르게 사용하지 않았을 수 있습니다. socket.open()의 동의어 일뿐입니다.

+0

와우, 작동합니다. 감사합니다. 그냥 궁금 해서요, 둘 사이의 차이점은 무엇입니까? – FirstLegion

+0

@FirstLegion - 자세한 설명이 내 답변에 추가되었습니다. – jfriend00

+0

지금은 의미가 있습니다. 감사합니다. – FirstLegion

0

사용 io.connect

var socket = io.connect("http://external-domain.com:3000", { rejectUnauthorized: false }); 

// { rejectUnauthorized: false } ("URL")은 선택적 매개 변수입니다.

희망이 당신을 위해 작동합니다.

+0

올바른 URL을 찾지 못해 거부당하는 것 같지 않습니다. – FirstLegion