Закрытие серверной части сокета на socket.io?

Я уверен, что это простой вопрос, но я понятия не имею, где находятся документы socket.io, а у http://labs.learnboost.com/socket.io/ нет действительно помогите.

Итак, позвольте сказать, что у меня есть http-сайт socket.io http и написано веб-сайт для подключения к нему.

  • Как обеспечить защиту сервера, чтобы неавторизованные пользователи (люди, которые не подключались через сайт) были заблокированы/сброшены/заблокированы.

  • Как завершить соединение сокета на стороне сервера? Так что если у меня

    io.sockets.on('connection', function (socket) {
    socket.on('end', function() {
        var i = global_sockets_list.indexOf(socket);
        global_sockets_list.splice(i, 1);
      });
    
      socket.emit('end'); // Doesn't work, just sends data
      socket.end(); //error
    
    });
    

Как завершить соединение сокета? (Соединение затем отключается выше для тестирования)

Ответы

Ответ 1

Попробуйте позвонить:

socket.disconnect('unauthorized');

или

socket.close();

EDIT: возможно, вы сможете проверить заголовок реферирования. Подробнее см. Проблемы безопасности Socket.io.

Ответ 2

На стороне сервера существует метод socket.disconnect, который берет логическое значение для закрытия основного транспортного соединения. Здесь исходный код с документами по состоянию на июль 2010 года:

/**
 * Disconnects this client.
 *
 * @param {Boolean} if `true`, closes the underlying connection
 * @return {Socket} self
 * @api public
 */

Socket.prototype.disconnect = function(close){
  if (!this.connected) return this;
  if (close) {
    this.client.disconnect();
  } else {
    this.packet({ type: parser.DISCONNECT });
    this.onclose('server namespace disconnect');
  }
  return this;
};

Итак, вы должны называть socket.disconnect(true);