2017-08-22 9 views
0

私は、ファイルが更新されるたびにファイルからクライアントにデータを送信するための簡単なスクリプトを作成しようとしています。私はテストして、ファイルが読み込まれているが、クライアントは何も受け取らないことがわかりました。コンソールにエラーはありません。私はsocket.ioにかなり新しいです。socket.ioがクライアントに送信しない

Node.jsのコード

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

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

fs.watchFile("assets/popup.json", {interval:100}, function(curr, prev) 
{ 
    fs.readFile("assets/popup.json",{encoding:"utf8"}, function(err, data){ 
     io.emit("popup", data) 
    }) 
}); 
http.listen(port, function(){ 
    console.log('listening on *:' + port); 
}); 

クライアントコード

var socket = io(); 
socket.on('popup', function(msg){ 
    alert("hello") 
}); 
+0

あなたは 'io.emit()'に近づいていますか?そこに 'console.log()'ステートメントを置くと、そのステートメントがコンソールに表示されますか? – jfriend00

+0

はい、私はconsole.log(data)を持っていて、データを出力して、ページ上に何も受け取らなかった –

+0

その後、socket.ioサーバーを初期化するすべての関連コードを表示してください。また、 'io.on( 'connect'、...)'をコールバックに 'console.log()'を入れて、クライアントが接続していると思っているかどうかを確認することができます。また、クライアントに接続エラーのさまざまなリスナーを登録して、それらのいずれかがヒットしているかどうかを確認することができます。イベント駆動型プログラミングに疑問がある場合は、すべてのエラーハンドラを登録して、トリガされているかどうかを確認します。私nodejsコードのすべて、それの多くは、それはホストとポート 'IO(それだから、クライアントコードがにロードされているブラウザバーのURLは何socket.ioウェブサイト – jfriend00

答えて

0

物事は右のように動作していないときはいつでも、 "デバッグモード" に頼る必要があります。そのモードでは、起こっている可能性のあるすべてのイベントを収集し、そのイベントから学んだことを確認する必要があります。そのために、クライアントにこのコードを追加します。

var socket = io(); 
socket.on('popup', function(msg){ 
    console.log("hello: ", msg) 
}); 
socket.on('connection, function() { 
    console.log("client connected"); 
}); 

socket.on('connect_error', function(err) { 
    console.log("client connect_error: ", err); 
}); 

socket.on('connect_timeout', function(err) { 
    console.log("client connect_timeout: ", err); 
}); 

これらのメッセージは、すべてあなたが任意の時点で「socket.ioのgithubのを」グーグルで見つけることができますsocket.io Github site上のクライアント側のドキュメントに記載されています。

次に、ページが読み込まれたらブラウザコンソールに表示される内容を確認してください。使用しているブラウザーのいずれかでブラウザー・コンソールを開く方法がわからない場合は、googleを参照してください。ページが読み込まれたら、デバッグコンソールを調べる必要があります。

参考までに、このコードの前にscriptタグを使用してsocket.ioをページに読み込んだとします。そうでない場合、そのエラーもコンソールに表示されます。


OP、このエラーを取得します。

client connect_error: 
    Error: server error at Socket.onPacket (socket.io-1.2.0.js:1) 
     at XHR.<anonymous> (socket.io-1.2.0.js:1) 
     at XHR.Emitter.emit (socket.io-1.2.0.js:1) 
     at XHR.Transport.onPacket (socket.io-1.2.0.js:1) 
     at callback (socket.io-1.2.0.js:2) 
     at Object.exports.decodePayload (socket.io-1.2.0.js:2) 
     at XHR.Polling.onData (socket.io-1.2.0.js:2) 
     at Request.<anonymous> (socket.io-1.2.0.js:2) 
     at Request.Emitter.emit (socket.io-1.2.0.js:1) 
     at Request.onData (socket.io-1.2.0.js:2) 

OK、進捗。どのようにクライアントページにsocket.ioをロードしていますか?これは、クライアントとサーバーでsocket.ioのバージョンが一致していない可能性があります。

<script src="/socket.io/socket.io.js"></script> 

をして、あなたのサーバーは、クライアントのページにsocket.ioの正確な同じバージョンを供給されます:あなたがやるべきこと。また、このエラーはクライアントサイドのsocket.io 1.2.0を報告するので、サーバにはどのバージョンのsocket.ioがインストールされていますか?

+0

クライアントconnect_error:エラー:サーバーエラー at Socket.onPacket socket.io-1.2.0.js:1) at XHR。 (socket.io-1.2.0.js:1)XHR.Emitter.emitで (socket.io-1.2.0.js:1)XHR.Transport.onPacketで (socket.io-1.2.0。 (socket.io-1.2.0.js:2) XHR.Polling.onData(socket.io-1.2.0.js:2) のコールバック時に、 io-1.2.0.js:2) をリクエストしてください。 (socket.io-1.2.0.js:2) Request.Emitter.emitで(socket.io-1.2.0.js:1)Request.onData(socket.io-1.2.0.jsで 。 2) –

+0

このエラーが発生しました –

+0

@TylerSilva - OK、進捗状況。どのようにクライアントページにsocket.ioをロードしていますか?これは、クライアントとサーバーでsocket.ioのバージョンが一致していない可能性があります。 ''を実行する必要があります。そうすれば、サーバーはsocket.ioと全く同じバージョンのクライアントページを送ります。 – jfriend00

0

問題はあなたが実際に接続していないように見えるこの

socket.on('popup', function(msg){ 
     socket.emit('message',"popup"); 
    }); 
+0

をsocket.ioし、「すべてのエラーメッセージハンドラが」何であるかを知ってかなり新しいイムいけない:URL内の –

-1

を試してみてくださいローカルsocket.ioサーバー。以下のコードでノードserver.jsを実行すると、Webサーバーを起動できます。次に、ブラウザのlocalhostに移動して、popup.jsonに対して行われたコンソールの変更を確認します。

server.js

var app = require('http').createServer(handler); 
var io = require('socket.io')(app); 
var fs = require('fs'); 

app.listen(80); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
     function (err, data) { 
      if (err) { 
       res.writeHead(500); 
       return res.end('Error loading index.html'); 
      } 

      res.writeHead(200); 
      res.end(data); 
     }); 
} 

fs.watchFile("popup.json", {interval: 100}, function (curr, prev) { 
    fs.readFile("popup.json", {encoding: "utf8"}, function (err, data) { 
     io.emit("popup", JSON.parse(data)); 
    }) 
}); 

index.htmlを

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://localhost'); 
    socket.on('popup', function (data) { 
     console.log(data); 
    }); 
</script> 
+0

質問のコードに何が間違っていたかについての説明がなく、正確にあなたが修正したものは、適切な説明ではそうではないように、決して良い答えではありません。 2つのコードを視覚的に比較して、変更した内容を把握しようとしました。理想的ではない。 – jfriend00

+0

それも仕事をしなかった、同じ問題を抱えている、まだそれは送信していない –

+0

実行中にpopup.jsonを変更しましたか? – Wesley

関連する問題