2017-12-01 8 views
0

익스프레스를 사용하여 내 사이트를 생성합니다 (예 : express mysite). 내 사이트에 socket.io 지원을 추가합니다. 하지만 내 socket.io 클라이언트가 서버에 연결하려고하면 서버가 '연결'이벤트 (.on ('connection', function (socket) ...)를 수신하고 클라이언트가 메시지를받지 못했다는 것을 알게되었습니다. 내/빈/www가에서socket.io는 node.js 서버에서 작동하지 않습니다. (익스프레스 포함)

var app = require('../app'); 
var debug = require('debug')('mysite:server'); 
var http = require('http'); 
var https= require('https'); 
var fs = require('fs'); 


//Get port from environment and store in Express. 
var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 
app.set('httpsport', 443); 

//Create HTTP server. 
var options = { 
    key: fs.readFileSync('.\file.pem'), 
    cert: fs.readFileSync('.\file.crt') 
}; 

var server = http.createServer(app); 
var httpsServer = https.createServer(options, app).listen(app.get('httpsport')); 

//Listen on provided port, on all network interfaces. 
server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

//Normalize a port into a number, string, or false. 
function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
     // named pipe 
     return val; 
    } 

    if (port >= 0) { 
     // port number 
     return port; 
    } 
    return false; 
} 

//Event listener for HTTP server "error" event. 
function onError(error) { 
    .......... 
} 
//Event listener for HTTP server "listening" event. 
function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    debug('Listening on ' + bind); 
} 

//socket.io 
var io = require('socket.io')(httpsServer); 

io.on('connection', function(socket) {  
    //keep printing 'new connection' string in console 
    console.log('new connection'); 
    //client doesn't receive this message 
    socket.emit('message', {'message': 'hello world'}); 
}); 

내 고객 :

<html> 
    <head> 
     <script src="https://cdn.socket.io/socket.io-1.0.0.js"></script> 
     <script src="https://code.jquery.com/jquery-3.2.1.min.js" 
      integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
      crossorigin="anonymous"></script> 
    </head> 
    <body> 
     <script> 
      var URL_SERVER = 'https://localhost:443'; 
      var socket = io.connect(URL_SERVER); 

      socket.on('message', function(data) { 
      $('#message').text(data.message); 
      }); 
     </script> 
     <div id="message">Message</div> 
     </body> 
    </html>  

어떤 제안

답변

1

당신은 socket.io의 아주 오래된 버전을 참조하는 (1.0.0) 귀하의 클라이언트에서. 어떤 versi 지정하지 server.io에서 서버에서 사용하고 있지만 이상적으로는 클라이언트와 서버가 일치해야합니다.

socket.io는 서버의 /socket.io/socket.io.js 경로에서 일치하는 클라이언트 스크립트를 제공하거나 CDN의 최신 버전을 사용할 수 있습니다.

https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.4/socket.io.js https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js

1.x에서 분기 (1.7.4)의 최신 버전과 2.x는 지점에서 최신 버전 모두 나를 위해 예상대로 코드는 실행 (2.0.4)

+0

socket.io의 veriosn이이 문제를 일으켰습니다! 고마워요! 너는 내 하루를 구한다! – jones321

관련 문제