2017-11-30 11 views
1

서버 측 코드 :Node.js를, socket.io HTTPS 연결

var io = require('socket.io').listen(8150); 
io.sockets.on('connection', function (socket){ 

}); 

클라이언트 측 코드 : HTTP에

var socketIO = io('*.*.*.*:8150'); 
socketIO.once('connect', function(){ 

}); 

그것을 연결하지 동일한 페이지에 HTTPS에 근무합니다. 많은 예제를 검색했지만 표현의 모든 예를 보여줍니다. socket.io 작업에만 필요한 node.js에 http 서버를 만들지 않습니다.

+0

HTML 페이지를 https로 변경할 때 위 코드를 변경 했습니까? – Loren

+0

아니요 코드를 변경하지 마십시오. http의 원본 코드 작업이며 https에서 작동하지 않습니다. – PainMustDie

답변

0

HTTPS를 통해 클라이언트를 실행할 때 socket.io는 HTTPS를 통해 서버에 연결하려고 시도하고 있습니다. 현재 서버는 HTTP 연결 만 수락하고, listen(port) 함수는 HTTPS를 지원하지 않습니다.

HTTPS 서버를 만든 다음 socket.io를 이와 같이 연결해야합니다.

var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('certs/privkey.pem'), 
    cert: fs.readFileSync('certs/fullchain.pem') 
}; 

var app = require('https').createServer(options); 
var io = require('socket.io').listen(app); 
app.listen(8150); 

io.sockets.on('connection', function (socket) { 

}); 

그리고 HTTP와 HTTPS가 모두 필요한 경우 두 대의 서버를 시작하고 둘 모두에 socket.io를 연결할 수 있습니다.

var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('certs/privkey.pem'), 
    cert: fs.readFileSync('certs/fullchain.pem') 
}; 

var httpServer = require('http').createServer(); 
var httpsServer = require('https').createServer(options); 
var ioServer = require('socket.io'); 

var io = new ioServer(); 
io.attach(httpServer); 
io.attach(httpsServer); 
httpServer.listen(8150); 
httpsServer.listen(8151); 

io.sockets.on('connection', function (socket) { 

}); 

그런 다음 클라이언트 측에서 HTTP 또는 HTTPS를 통해 페이지에 액세스했는지 여부에 따라 연결할 포트를 결정할 수 있습니다.

var port = location.protocol === 'https:' ? 8151 : 8150; 
var socketIO = io('*.*.*.*:' + port); 
socketIO.once('connect', function() { 

}); 
+0

3 개의 파일이 있습니다. server.key - (서버 개인 키) // server.crt - (내 서버 인증서) // chsert.crt - (다른 인증서가 연결됨). 어떻게 내가 privkey.pem과 fullchain.pem을 생성 할 수 있습니까? 파일 이름을 .pem으로 변경했지만 오류가 발생했습니다. '오류 : 0B080074 : x509 인증서 루틴 : X509_check_private_key : 키 값이 일치하지 않습니다. ' – PainMustDie

+0

fullchain.pem을 어떻게 만듭니 까? – PainMustDie

+0

해당 파일은있는 그대로 작동해야합니다. 'key :'를'server.key' 파일에,'cert :'를'server.crt' 파일에 설정하고'ca :'속성을'chsert.crt' 파일을 담고있는 배열로 추가하십시오. 예를 들어 [this] (https://stackoverflow.com/a/13450299/2288513) 대답을 확인하십시오. –