Задать вопрос
Ответы пользователя по тегу Компьютерные сети
  • Можно ли получать через IFTTT обновления обычных страничек?

    @jacob1237
    Если ничего не найдете, попробуйте SuperFeedr: можно подписываться на HTML страницы, фрагменты JSON и XML.
    Результат можно получать либо в виде веб-хука, либо через XMPP.
    Ответ написан
    Комментировать
  • Веб-скрэпинг заблокированных сайтов: что посоветуете?

    @jacob1237
    Если бы я делал это руками, я использовал бы Tor или friGate, но, естественно, я не хочу делать это руками

    Tor прекрасно работает в качестве прокси для ботов/краулеров. Весь вопрос только в стабильности соединения и попадании в черные списки IP. Потому что некоторые сервисы умеют определять принадлежность IP к сети Tor.

    Если нужно делать профессионально, посмотрите на сервисы типа Crawlera. Это очень удобный авторотатор прокси.

    Но если данные Вы собираете не в гигантских масштабах и не со скоростью света (фактически заваливая веб-сайты), то самый простой вариант - купить аккаунт любого зарубежного VPN-сервиса и гонять своих ботов с домашнего PC через VPN-туннель, т.е. с одного IP.
    Ответ написан
    Комментировать
  • Порекомендуйте язык/фреймфорк/технологию для websocket-сервера?

    @jacob1237
    Асинхронная модель обработки сетевых соединений можно сказать что единственно верная для данной задачи.
    Корень зла здесь - так называемая "проблема C10k", то есть "проблема 10 тысяч соединений": https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D...
    При построении чатов эта проблема стоит особенно остро, т.к. если у Вас, например, 2000 онлайн пользователей, то и соединений с ними тоже 2000, которые необходимо поддерживать в активном состоянии в режиме реального времени.
    Именно в таких случаях асинхронная модель выигрывает, потому что на каждое соединение получается очень небольшой оверхед по памяти, в отличие например от модели когда на каждое соединение создается системный поток - thread.

    Теперь про возможные технологии. Написать чат на вебсокетах возможно много на чем.
    Фаворитами по скорости программирования здесь будут, ИМХО, JavaScript (Node.js) и Python. По скорости же работы - Go, Erlang и прочие компилируемые языки.

    Python:
    1. Twisted + sockjs-twisted
    2. Tornado + sockjs-tornado (уже приводили здесь)
    3. Crossbar.io (http://crossbar.io/) - комплексное решение, которое позволит сконцентрироваться на логике приложения, а не на технических вопросах.
    4. Разные вариации библиотек (Authobahn.io, asyncio etc.)

    JavaScript (Node.js):
    1. Socket.io (socket.io/) - достаточно известное решение, комплексное, позволяет не думать о технической части
    2. SockJS (https://github.com/sockjs/sockjs-node) - больше библиотека чем фреймворк. Например мультиплексирование (несколько "виртуальных" соединений внутри одного сокета) придется пилить вручную (правда есть библиотеки)

    Хочется отметить, что вне зависимости от использования Socket.io или SockJS, настанет момент, когда Вы захотите использовать все ядра своего процессора для обработки пользовательских соединений (по одному запущенному процессу на ядро). И вот тут на Python придется вручную писать логику построения кластера из нескольких процессов.
    В Node.js эту проблему решает модуль "Cluster" (https://nodejs.org/api/cluster.html).
    В принципе на Python тоже можно быстро написать этот функционал (например на Twisted), но осадочек, как говорится, остался)

    По поводу скорости - JavaScript (Node.js) априори будет быстрее чем Python, т.к. там JIT компиляция.
    Уравновесить ситуацию поможет PyPy - нестандартный интерпретатор Python, который тоже использует JIT-компиляцию. В этом случае разницы в скорости практически не будет заметно.

    Сам я люблю и уважаю Python, поэтому порекомендую его. Хотя бы потому что в Twisted, Tornado да и asyncio есть корутины (coroutines), а в новых версиях Python даже async/await. Эти конструкции позволят Вам писать в линейном стиле и избежать лапшекода как в JavaScript.

    PHP:
    1. Ratchet (уже писали о нем)
    2. phpDaemon

    PHP рекомендовать не буду, разве что если у Вас вся система на PHP и программисты больше не знают других языков.

    Если очень нужна высокая скорость и нетребовательность к ресурсам, пишите сразу на Go. Вот выше Вам уже посоветовали комплексные решения типа Centrifugo (который кстати сначала был написан на Python + Tornado).

    P. S. Забыл отметить, что если Вам нужны исключительно веб-сокеты (которые будут работать во всех современных браузерах), то Вы вообще можете отказаться от Socket.io и SockJS. Эти библиотеки хороши для обеспечения совместимости со старыми браузерами, ну или для случаев, когда вебсокеты режутся сетевым оборудованием. Эти библиотеки по-умолчанию переключат браузер в режим long-polling.

    Однако если Вам все это не нужно - то не берите, тем самым уменьшите оверхед на браузер и сервер.
    Ответ написан
    Комментировать