Comments 17
Ранее мы использовали опцию server_socket.listen(10) для настройки сервера. Она означает ограничение на количество единовременных подключений к серверному сокету.
Это не совсем так. Этот параметр означает максимальный размер очереди из еще не принятых подлючений (ожидающих соответствующего
server_socket.accept()
). Количество одновременно-активных подключений ограничено совсем другими факторами.docs.python.org/3/library/socket.html#socket.socket.listen
Select?
А разве для реальной работы (помимо учебных примеров) его ещё используют?
На крайний случай сразу бы уж poll. Оно хоть тоже не без недостатков, но с него уже проще двигаться в сторону современных epoll/kqueue или iocp (если под виндой).
Такого добра здесь уже написано много.
Мне кажется большая вариация статей на одну тему — не так уж и плохо. Посмотрите какое количество учебников, статей, видео курсов по математическому анализу существует. Тем не менее до сих есть люди, которые пишут новые. Мне кажется, это отлично.
На CoffeScript будет выглядеть так:
net = require 'net'
server = net.createServer (socket) ->
[addr, port] = [socket.remoteAddress, socket.remotePort]
console.log "Client from #{addr}:#{port} connected."
talk = ->
socket.end('Bye!')
socket.on "data", (data) ->
console.log "Received from #{addr}: #{data.toString()}"
setTimeout talk, Math.random() * 2000
socket.on "end", ->
console.log "Client from #{addr}:#{port} disconnected"
socket.on "error", (e) ->
console.log e.toString()
server.listen 8080, ->
console.log "Listening on #{server.address().port} ..."
Статье, кстати, не хватает хотябы кратенького обзора самых распространённых фреймворков и библиотек для написания асинхронных серверов. Я бы обмолвился о таких релевантных пакетах как: aiohttp, tornado, asyncio и т.д.
Стоило бы ещё в двух словах рассказать об особенностях их внутренней реализации по сравнению с рассмотренными в статье примерами.
Статья вполне годится, чтобы добавить в закладки "для новичков", но если кому скинуть — сразу прибегут за объяснениями что за select. Об этом бы тоже не мешало поподробнее.
Недостаточно хорошо знакомые с тематикой могут удивиться :)
Свой асинхронный tcp-сервер за 15 минут с подробным разбором