Node.js和socket.io成千上万次连接尝试失败

时间:2017-08-15 22:30:21

标签: javascript node.js sockets express socket.io

晚上好社区,我努力解决这个问题,但我认为我需要你的智慧,因为我真的不知道这里的问题是什么。我有一个node.js服务器,通过express服务index.html。我目前正在开始使用socket.io。

这是我客户端的代码:

$( document ).ready(function() {

document.getElementById("start").addEventListener("click", startGame);


function startGame() {
    var socket = io();  console.log("Sending request to server");
    socket.emit('connectToTable', {tableID: 1});      

socket.on('successfulConnection', function(msg){
          alert(msg);
        }); }

});

这是我服务器端的代码:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var express = require('express');
var port = process.env.PORT || 3000;
path = require('path');

app.use(express.static(path.join(__dirname, '/')));

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log("There is someone knocking on the door")
  socket.on('connectToTable', function(socket){
    console.log("Received player request")
    var player = new Player(socket.id);
    socket.emit('successfulConnection', "The connection to the server has been successful");
  });
});

http.listen(port, function(){
  console.log('listening on *:' + port);
});  

在我服务器上的控制台上,我看到了#34;有人敲门#34;每秒打印数百或数千次,导致CPU负载达到100%。与此同时,我可以在客户端(在Chrome中)看到正在制作数百个xhr民意调查。

Connections in Chrome

我真的无法弄清楚为什么在第一次连接尝试后没有建立连接,并经常重试。此外,我甚至不知道为什么它甚至使用xhr轮询而不是websockets。

非常感谢帮助。非常感谢你。

1 个答案:

答案 0 :(得分:3)

你必须在客户端和服务器上使用相同版本的socket.io(我在5天前遇到了同样的问题),请在控制台上查看:

  

npm list socket.io

服务器的版本,看看你在index.html上使用相同的版本,就像这样:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>

您可以从此处获取网址:

Versions of socket.io

此致