Соединение сервера / клиентского сокета Nodejs с engine.io
Я пытаюсь получить простое сокетное соединение, установленное между слушателем сокета engine.io, который прослушивает порт 8888, и клиентом javascript, который работает в простом index.html
Выглядело это довольно просто, чтобы выполнить эту задачу, но я почему-то не могу правильно подключить клиент xhr-polling. Он соединяется, так как номер клиента увеличивается, но событие onopen никогда не запускается на стороне клиента. Вместо этого число клиентов на стороне сервера просто продолжает бесконечно увеличиваться, и клиент никогда не получает никаких сообщений от сервера - и при этом сервер не получает никаких сообщений от клиента.
Все это отлично работает с транспортом websocket, но мне также нужен xhr-опрос.
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)
1 ответ
Если ваши HTML и статические файлы (JS) являются серверами из другого домена (например, localhost:80, как port == еще один "домен").
Затем по соображениям безопасности он может запретить использование WebSockets или другого трафика по причинам CORS.
Используйте вкладку "Сеть" в Dev Tools вашего любимого браузера, чтобы проверить, что происходит, и если какие-либо запросы не выполняются, а также их заголовки.