ポート 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)