2

ポート 8888 でリッスンしている engine.io ソケット リスナーとプレーンな index.html で実行されている JavaScript クライアントとの間で確立された単純なソケット接続を取得しようとしています。

このタスクを達成するのはかなり簡単に見えましたが、どういうわけか、xhr ポーリング クライアントを適切に接続できません。クライアント番号が増加するため、接続しますが、onopen イベントはクライアント側でトリガーされません。代わりに、サーバー側のクライアント数は無限に増加し続け、クライアントはサーバーからメッセージを受信することはなく、サーバーもクライアントからメッセージを受信しません。

それはすべて websocket トランスポートで完全に機能しますが、機能するには xhr-polling も必要です。

app.js

var engine = require('engine.io');
var server = engine.listen(8888);

server.on('connection', function (socket) {
    console.log(server.clientsCount);
    socket.send('never received by client'); // << xhr-polling client does not receive
    socket.on('message', function (msg) {
        if ('echo' == msg) socket.send(msg);
    });
});

index.html

<html>
<head>

<script src="engine.io.js"></script>
<script>
    var socket = eio('ws://localhost:8888/'); << starts polling immediately like crazy
    socket.onopen = function(){
        console.log('never fired'); << never sent to console
        socket.onmessage = function(data){};
        socket.onclose = function(){};
    };
</script>

</head>
<body>
</body>
</html>

クライアント コンソール

GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 280ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 1ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 1ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 1ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 0ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 0ms engine.io.js (Zeile 1585)
GET http://localhost:8888/engine.io/?EIO=2&transport=polling 200 OK 0ms engine.io.js (Zeile 1585)
4

1 に答える 1

0

HTML および静的ファイル (JS) が別のドメインのサーバーである場合 (たとえば、port == 別の「ドメイン」として localhost:80)。
次に、セキュリティ上の理由により、CORS の理由により発生する WebSocket またはその他のトラフィックを拒否する可能性があります。

お気に入りのブラウザーの Dev Tools の [ネットワーク] タブを使用して、何が起こっているのか、リクエストが失敗したかどうか、およびそのヘッダーを確認します。

于 2014-03-05T17:21:03.407 に答える