Хобрук: Ваш путь к мастерству в программировании

Ожидаемое поведение для сокета select() при получении данных при обработке других данных?

У меня есть концептуальный вопрос относительно программирования сокетов и запуска команды select в цикле while. Посмотрите этот отрывок из примера эхо-сервера (написанного на python, но язык не имеет значения): http://ilab.cs.byu.edu/python/select/echoserver.html

while running: 
  inputready,outputready,exceptready = select.select(input,[],[]) 

  for s in inputready: 

    if s == server: 
        # handle the server socket 
        client, address = server.accept() 
        input.append(client) 

    elif s == sys.stdin: 
        # handle standard input 
        junk = sys.stdin.readline() 
        running = 0 

    else: 
        # handle all other sockets 
        data = s.recv(size) 
        if data: 
            s.send(data) 
        else: 
            s.close() 
            input.remove(s) 

Вопрос: каково ожидаемое поведение процесса при выполнении кода в цикле for, если в этот момент подключается новый клиент и отправляет данные? Есть ли какой-то буфер, который является частью библиотеки сокетов по умолчанию, чтобы при последующем вызове select он немедленно возвращался со значением, которое пришло во время обработки предыдущего запроса? Или новый клиент, подключающийся, когда сервер фактически не ожидает в select(), будет игнорироваться, и поэтому всегда возможно (хотя и маловероятно, учитывая, что мы говорим о миллисекундах) запросы будут отброшены?

(ПРИМЕЧАНИЕ: я провел некоторые эмпирические испытания на другой кодовой базе, использующей сокеты, и оказалось, что буфер есть — если это действительно задумано, каков типичный размер этого буфера?)

26.05.2011

Ответы:


1

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

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

26.05.2011
  • Отлично, отставание по прослушиванию имеет смысл и согласуется с тем, что я наблюдаю эмпирически. Благодарю вас! 26.05.2011
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..