socket.io无法在node.js服务器上运行(带快递)

时间:2017-12-01 02:00:29

标签: node.js express socket.io

我用express来生成我的网站(即表达mysite);我在我的网站中添加了socket.io支持。但是当我的socket.io客户端尝试连接服务器时,我发现服务器一直在接收'连接'事件(.on('connection',function(socket)...)并且客户端没有收到任何消息......

在我的/ bin / www

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 个答案:

答案 0 :(得分:1)

您在客户端中引用了一个非常旧版本的socket.io(1.0.0)。您没有指定在服务器上使用的socket.io版本,但理想情况下客户端和服务器应该匹配。

socket.io将在您服务器的SELECT DISTINCT路径上提供其匹配的客户端脚本,或者您可以使用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)