Socket.io а современные браузеры не работают


У меня возникли некоторые странные проблемы с socket.io и современные браузеры. Удивительно, но с IE9 работает нормально, потому что резервные копии для flashsocket, которые, кажется, работают лучше.

В моем сервере (с express)

var io = socketio.listen(server.listen(8080));
io.configure('production', function(){
    console.log("Server in production mode");
    io.enable('browser client minification');  // send minified client
    io.enable('browser client etag');          // apply etag caching logic based on version number
    io.enable('browser client gzip');          // gzip the file
    io.set('log level', 1);                    // reduce logging
    io.set('transports', [                     // enable all transports (optional if you want flashsocket)
        'websocket'
        , 'flashsocket'
        , 'htmlfile'
        , 'xhr-polling'
        , 'jsonp-polling'
    ]);
});

В браузере я вижу на вкладке Сеть (в Chrome), что websocket стабилизирован и входит в 101 Switching Protocols в режиме ожидания. После этого появляется xhr-опрос и JSONP-опрос (Что случилось с flashsocket ? )

Хуже всего то, что информация не идет туда и обратно. Я имейте это на связи:

io.sockets.on('connection', function (socket) {
    // If someone new comes, it will notified of the current status of the application
    console.log('Someone connected');
    app.sendCurrentStatus(socket.id);
    io.sockets.emit('currentStatus', {'connected': true);
});

И на клиенте:

socket.on('currentStatus', function (data){ console.log(data) });

Однако я смогу увидеть этот журнал только тогда, когда выключу сервер , который запускается с:

NODE_ENV=production node server.js

Что я делаю не так?

2 6

2 ответа:

Наконец, после того, как я действительно ударился головой о стену, я решил проверить в нескольких средах, чтобы увидеть, Была ли это проблема брандмауэра, так как машина находится за несколькими из них.

Оказалось, что ни у кого, кроме меня, не было этой проблемы, поэтому я проверил антивирус (Trend Micro) и после отключения Chrome/Firefox смогли сделать свою магию.

Мораль рассказа

Кроме того, что здесь написано - Socket.IO и брандмауэр программного обеспечения - всякий раз, когда вы сталкиваетесь с проблемой, что никто в интернете вроде бы есть (т. е. не заходил на github ни в socket.io группа) это, вероятно, вызвано вашим антивирусом. Они-зло. Иногда.

Вы должны просто иметь socketio слушать само приложение.
Кроме того, мне никогда не нужно было делать всю конфигурацию на стороне сервера с сокетом, который вы делаете - socket.io должно работать из коробки на большинстве браузеров, не делая этого. Я бы попробовал сначала без настройки. Кроме того, на сервере, вы должны излучать из сокета, который передается функции обратного вызова, а не делать io.разъемы.на.

var io = socketio.listen(app);

io.sockets.on('connection', function (socket) {
  // If someone new comes, it will notified of the current status of the application
  console.log('Someone connected');
  app.sendCurrentStatus(socket.id);
  socket.emit('currentStatus', {'connected': true);
});

На клиенте вам необходимо подключиться первый:

var socket = io.connect();
socket.on('currentStatus', function (data){ console.log(data) });

Если вы хотите увидеть пример двухсторонней связью, используя сокет.Ио, проверить мои приложения Нодио.

Серверная сторона: https://github.com/oveddan/Nodio/blob/master/lib/Utils.js

И клиентская сторона: https://github.com/oveddan/Nodio/blob/master/public/javascripts/Instruments.js