Теоретический вопрос: допустим, я открываю Skype, и мне звонит друг. Как Skype узнает, что мне звонят? Проверял ли он звонки (сигналы) каждую секунду?

Skype: Кто-то звонит?

Сервер: Нет.

Skype: Кто-то звонит?

Сервер: Нет.

Skype: Кто-то звонит?

Сервер: Да.

Skype: Хорошо, подключи нас.

Несомненно, должен быть способ получше.

1
Phil 17 Ноя 2017 в 17:12

1 ответ

Лучший ответ

Я не знаю, как на самом деле реализован Skype. Надеюсь, вопрос был не в этом. Вот подробное описание того, как это может работать.

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

  • У вас запущен сервер
  • Сервер прослушивает сокет
  • Во время прослушивания сервер заблокирован (ничего не делает)
  • Когда информация поступает для вашего сокета, ОС сигнализирует вашему серверу
  • После получения сигнала сервер принимает информацию и отвечает соответствующим образом.

Это может быть или не быть реалистичным изображением того, что происходит в вашем конкретном случае. Другая возможность такова:

  • У вас работает клиент
  • Работает удаленный сервер
  • Вы устанавливаете сеанс с удаленным сервером и начинаете слушать
  • Во время прослушивания клиент заблокирован (ничего не делает)
  • Сервер прослушивает сокет
  • Во время прослушивания сервер заблокирован (ничего не делает)
  • Когда пакеты приходят для вашего клиента Skype, удаленная ОС сигнализирует серверу
  • После получения сигнала сервер запускает новый поток для обработки вашего запроса.
  • Он определяет, что полученные пакеты были связаны с вашим сеансом, и отправляет их.
  • Когда эта информация поступает в вашу локальную ОС, она сигнализирует вашему клиенту
  • После получения сигнала клиент принимает информацию и отвечает соответствующим образом.

Фотографии каждого метода:

    SKYPE     __________________   ????????
(local server)                  (remote client)



    SKYPE     _________     SERVER    ________   ???????
(local client)         (remote server)        (remote client)

В обоих случаях опрос не требуется при условии, что задействованные операционные системы поддерживают мультипрограммирование (выполнение нескольких процессов перекрывается, не обязательно действительно параллельно), и в этом случае эти процессы могут блокироваться при вводе-выводе до тех пор, пока ОС не получит сигнал.

По сути, мультипрограммирование с блокировкой ввода-вывода очень похоже на опрос в том смысле, что планировщик процессов опрашивает каждый раз, когда принимает решение о том, какой процесс получит следующий квант времени.

1
Patrick87 17 Ноя 2017 в 15:03