Я пытаюсь интегрировать Socket.io с Angular, и у меня возникают трудности с подключением с клиентской стороны к серверу. Я просмотрел другие связанные вопросы, но моя проблема происходит локально, поэтому нет веб-сервера посередине.
Это код моего сервера выглядит следующим образом:
const app = express();
const server = http.createServer(app);
const io = require('socket.io').listen(server);
io.on('connection', function(socket) {
socket.emit('greet', { hello: 'Hey, Mr.Client!' });
socket.on('respond', function(data) {
console.log(data);
});
socket.on('disconnect', function() {
console.log('Socket disconnected');
});
});
Я загружаю файлы JavaScript на стороне клиента с помощью Grunt в следующем порядке:
dist: {
src: [
public/bower_components/angular/angular.min.js,
...
public/bower_components/socket.io-client/dist/socket.io.min.js,
public/bower_components/angular-socket-io/socket.min.js,
...
]
}
Затем в моем контроллере:
function MyController($scope) {
let socket = io.connect(window.location.href);
socket.connect('http://localhost:3000');
socket.on('greet', function(data) {
console.log(data);
socket.emit('respond', { message: 'Hello to you too, Mr.Server!' });
});
...
}
Прежде чем использовать библиотеку btford/angular-socket-io
, я хочу убедиться, что я могу правильно установить соединение, но я получаю следующую ошибку в консоли:
Интересно, что если я перезапущу серверный процесс Node.js, ему удастся отправить сообщение, но с помощью опроса вместо веб-сайтов.
Я пробовал всевозможные опции в вызове socket.connect, но ничего не работало.
Любая помощь будет оценена.
ОБНОВЛЕНИЕ (30/12/2016):
Я только понял, что websockets работает частично. Я вижу запрос 101 Switching Protocols в консоли разработчика Chrome. Однако единственными кадрами, которые я вижу там, являются пакеты протокола engine.io(пинг, понг). Однако мои сообщения сокета приложения все еще возвращаются к опросу по какой-то причине...