2017-08-15 10 views
0

おはようございますSOコミュニティでは、この問題を解決するために非常に努力しましたが、私は実際に何が問題か分からないので、あなたの知恵が必要になると思います。エクスプレス経由でindex.htmlを提供しているnode.jsサーバーがあります。私は現在socket.ioを使い始めています。Node.jsと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); 
}); 

ドアをノックする人がいる」と、1秒間に数百回または数千回印刷され、100%のCPU負荷が発生します。同時に、私はクライアント側(Chromeで)に数百回のxhr投票が行われているのを見ることができます。

Connections in Chrome

接続は最初の接続試行後に設立され、すっごく頻繁に再試行されていない理由を私は本当に理解することはできません。さらに、WebSocketの代わりにxhrポーリングを使用しているのはどうしても分かりません。

非常に高く評価されるでしょう。事前にありがとうございます。

+1

これはサーバー側ではconsole.log()行の末尾にセミコロンの不足によって引き起こされている任意のチャンスはありますか? – Jordan

+1

また、 'new Player'行をテストとして削除して、そのイベント内で例外が発生する可能性があるかどうかを確認します。 – Jordan

+0

@ヨルダン:残念ながら。私はちょうどそれを試したと私は前にコードでこのconsole.logを持っていない。それにもかかわらず、近代的なJSはあまりにもあまり気にしないでください。しかし、良いアイデア。私はこの問題を引き起こすかもしれない何が本当に不思議です..本当にもう知りません。私はそれが急いでルートフォルダの静的な提供とは何かを持っているかもしれないのだろうかと思う... 編集:それを削除することは役に立たなかった。私はエラーbtwを取得しません。 – DesperateEi

答えて

2

あなたはとコンソールをチェック、(私は5日前に同じ問題があった)クライアントとサーバーで、socket.ioの同じバージョンを使用する必要があります。

NPMリストソケットを。 IO

サーバーのバージョンと、あなたはこのようにindex.htmlの上で、クライアント上の同じバージョンを使用している場合を見て:

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

あなたがここからURLを取得することができます:

Versions of socket.io

よろしく

+1

また、私はこの問題を解決しました:var socket = io.connect( 'ws:// yourDomain:port /'、{transports:['websocket']}); (私はopenshiftでhttpには8000、httpsには8443を使用する必要があります)。 –

+0

ありがとうございます。私はそれを見つけたことがないでしょう。うん、それはnpm経由でノードにインストールするときに起こりますが、(古い)チュートリアルコードからフロントエンドの行をコピーします。 – DesperateEi

関連する問題