Делать было нечего дело было вечером. Решил протестировать простые сервера на node.js и golang через ab и JMeter — github.com/Garik-/http-benchmark
Библиотека µWebSockets.js ab не смог протестировать её, а JMeter показал результаты хуже чем обычный встроенный http на node.js.
Вы можете склонировать репозиторий и повторить тесты самостоятельно, пишите в issue пожелания и свои результаты.
Для меня основной критерий — скорость обработки запроса, как у python обстоят дела со скоростью сетевых запросов? Использует ли он неблокирующие сокеты или какие другие механихзмы? Есть ли смысл смотреть в сторону python если мне допустим необходимо обойти 3 000 000 сайтов?
Писал подобное на winAPI в далеком 2010 году, программа была установлена в компьютерной аудитории и использовалась лаборантами для коллекционирования курсовых, дипломов и недописанных статей, книг преподователей, которые использовали этот компьютер для показа презентаций.
К сожалению исходников я не нашел (винт приказал долго жить), остались лишь воспоминания в блоге
Программа висит в памяти и с интервалом в минуту проходится по всем логическим дискам, если это флешка запрашивается ее серийный номер — программа сравнивает записи в реестре о последнем копировании с данной флешки и если прошло больше суток запускается рекурсивная функция копирования. Копирование производится на доступный для записи диск с условием, что на диске достаточно свободного места.
Практически 10 лет занимаюсь веб разработкой, в качестве программиста, но в начале пути интересовался веб дизайном (обучался в худ. школе, есть навыки).
ИМХО В данном переводе из полезного только ссылки. «Я не дизайнер, но научу вас, как делать дизайн». Это как?
В той же художественной школе для того что бы нарисовать человека изучают анатомию, места крепления мышц, рисуют кучу эскизов, что бы передать на бумагу естественные пропорции и положения тела. А здесь «палка палка огуречик вот и вышел человечек».
Шаблонный макет в 3 колонки во flat стиле с «ворованными» иконками и цветовой гаммой могут сделать многие, но придумать идею, свой стиль, вдохнуть жизнь в макет, для этого нужен талант и творческое начало. У меня просто нет слов, что бы описать мое возмущение…
Какого размера? Ведь размер получаемых данных заранее не известен (исходя из условия задачи).
По поводу буферизации чтения записи, это тема отдельного разговора (http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx), особенно если дело касается асинхронности.
Не знаю специфики задачи, но если есть «бесконечный» буфер, когда не известен размер получаемых/обрабатываемых данных использую временные файлы (temporary file). В системе Windows временный файл, это по сути тот-же MMF, но если его размер превышает размер виртуального адресного пространства, он скидывается на диск. Про *nix не знаю.
Алгоритм получается такой: получили в буфер пакет, нашли сигнатуру начала и его длину, создали временный файл, записали туда данные, получили в буфер следующий пакет, во временный скинули данные. Пакет закончился, переместили курсор на начала файла, размер нам известен — анализируем. Ну и так как временный файл = память (для ОС Windows) — все работает быстро.
ИМХО для задачи с MPEG использовал бы MMF (memory mapped files), искал бы нужную сигнатуру начала блока в памяти, далее копирование в выделенный или подготовленный буфер, нужного участка, обработка.
Как то не оптимально сначала копировать, потом искать что нужно было скопировать… Ну это я придираюсь, статья то не об этом.
Прочел комментарии, сделал вывод: С++ разработчики более солидарны, чем PHP разработчики.
Запостил библиотеку для работы с HTTP протоколом, по всем ООП PHP канонам, написанную «just for fun», комментарии: велосипед, есть куча аналогов, чем твой код лучше, «Вроде и все правильно, но есть ощущение хардкода» и т.д. Пост в минусах.
А у вас, каждый советует, как сделать лучше, ну несколько только уперлись в boost::asio.
Как по мне. лучше если ты сам знаешь различия, разбираешься в механизмах асинхронного ввода-вывода (epoll, IOCP), чем слепо заучиваешь функциональность готовых библиотек.
Товарищи, учитесь, развивайтесь, пробуйте и пишите красивые велосипеды!
ИМХО все это развлечения. Ну захочется тебе написать программу и вместо реализации 80% времени ты затратишь на игры с интерфейсом, а спустя 2 дня «навороченная» программа будет и не нужна вовсе. Мне тем и нравится консольные программы — передал параметры, получил результат, интерфейс я делаю после и только в случае острой необходимости (например, если она предназначена для обывателя, который не разберется с терминалом).
После 4-5 лет работы веб-программистом (скриптовые языки PHP, JS), переключился на прикладное и системное программирование (Си), уволился и нашел интересный проект, клиент серверного приложения. Та же тяга к знаниям азарт интересные задачи :)
Теперь вот снова занимаюсь веб, но параллельно изучил и реализовал несколько проектов на JAVA под Android, в данный момент изучаю электронику, простые схемы, AVR и PIC микроконтроллеры (благо с ассемблером знаком давно и не по наслышке) есть идеи замутить «умный дом».
Главное не тормозить и когда «надоело», менять направление своих интересов, помогает для общего развития и расширяет кругозор.
На первом курсе на экзамене по программированию (Pascal, куда без него, лекции я не записывал просто приносил выполненные лабораторные) было 2 теоретических вопроса и одна задача. Из-за того что я больно «умный», на экзамене отвечал 2 билета и на листочке писал листинг 5 задач в нескольких вариантах решения (пока преподу не понравится). В итоге преподаватель выдал следующее на последнюю задачу «подсчитать количество пробелов» (были представлены варианты с различными циклами while. for etc, процедурами рекурсивными) — «пробел можно было записать ASCII кодом, у Вас поверхностные знания предмета» и со злой ухмылкой влепил хор в зачетку (все предыдущие экзамены были на отл).
«Погоня за идеалами вызывает депрессию и приводит к прокрастинации», хреново когда твои идеи и реализации не находят применения.
Самый губительный вопрос для junior-а — «А зачем?»…
В небольшом городе трудно найти задачи, особенно оплачиваемые, ведь семью нужно кормить.
Специально поставил тег «новичкам» и хотел еще «сложных» поставить в кавычки… Советы спорные, но лично я бы не советовал «новичкам» начинать с фреймворков. Это тоже самое что начинать учить jQuery не зная JavaScript.
ИМХО в программировании нужно двигаться от простого к сложному. Если ты можешь написать велосипед, ты сможешь оценить + и — готового решения, которое ты собираешься применить в проекте. В противном случае мы получаем код в котором jQuery используется для вызова alert и человек не понимает что можно сделать быстрей оптимальнее и проще…
Из мира прикладного программирования встречал я такие примеры когда программа которая показывает окошко «Hello World» тянет за собой 70 мегабайтов библиотек для её запуска (.NET), когда так же программа вписывается в один вызов MessageBox Windows API и занимает в скомпилированном виде 1,3 Кб не теряя функциональности во всех версиях ОС.
Библиотека µWebSockets.js ab не смог протестировать её, а JMeter показал результаты хуже чем обычный встроенный http на node.js.
Вы можете склонировать репозиторий и повторить тесты самостоятельно, пишите в issue пожелания и свои результаты.
К сожалению исходников я не нашел (винт приказал долго жить), остались лишь воспоминания в блоге
Какие диоды ставились в мосты (характеристики)? Зачем использовался серебряный припой? — это как и куда? Какие вы использовали разъемы для подключения колонок и входного сигнала?
ИМХО В данном переводе из полезного только ссылки. «Я не дизайнер, но научу вас, как делать дизайн». Это как?
В той же художественной школе для того что бы нарисовать человека изучают анатомию, места крепления мышц, рисуют кучу эскизов, что бы передать на бумагу естественные пропорции и положения тела. А здесь «палка палка огуречик вот и вышел человечек».
Шаблонный макет в 3 колонки во flat стиле с «ворованными» иконками и цветовой гаммой могут сделать многие, но придумать идею, свой стиль, вдохнуть жизнь в макет, для этого нужен талант и творческое начало. У меня просто нет слов, что бы описать мое возмущение…
Какого размера? Ведь размер получаемых данных заранее не известен (исходя из условия задачи).
По поводу буферизации чтения записи, это тема отдельного разговора (http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx), особенно если дело касается асинхронности.
Алгоритм получается такой: получили в буфер пакет, нашли сигнатуру начала и его длину, создали временный файл, записали туда данные, получили в буфер следующий пакет, во временный скинули данные. Пакет закончился, переместили курсор на начала файла, размер нам известен — анализируем. Ну и так как временный файл = память (для ОС Windows) — все работает быстро.
Как то не оптимально сначала копировать, потом искать что нужно было скопировать… Ну это я придираюсь, статья то не об этом.
Запостил библиотеку для работы с HTTP протоколом, по всем ООП PHP канонам, написанную «just for fun», комментарии: велосипед, есть куча аналогов, чем твой код лучше, «Вроде и все правильно, но есть ощущение хардкода» и т.д. Пост в минусах.
А у вас, каждый советует, как сделать лучше, ну несколько только уперлись в boost::asio.
Как по мне. лучше если ты сам знаешь различия, разбираешься в механизмах асинхронного ввода-вывода (epoll, IOCP), чем слепо заучиваешь функциональность готовых библиотек.
Товарищи, учитесь, развивайтесь, пробуйте и пишите красивые велосипеды!
Теперь вот снова занимаюсь веб, но параллельно изучил и реализовал несколько проектов на JAVA под Android, в данный момент изучаю электронику, простые схемы, AVR и PIC микроконтроллеры (благо с ассемблером знаком давно и не по наслышке) есть идеи замутить «умный дом».
Главное не тормозить и когда «надоело», менять направление своих интересов, помогает для общего развития и расширяет кругозор.
К слову начал работать «программистом» в веб-студии с 2005 и тогда мне было лет 16.
Самый губительный вопрос для junior-а — «А зачем?»…
В небольшом городе трудно найти задачи, особенно оплачиваемые, ведь семью нужно кормить.
ИМХО в программировании нужно двигаться от простого к сложному. Если ты можешь написать велосипед, ты сможешь оценить + и — готового решения, которое ты собираешься применить в проекте. В противном случае мы получаем код в котором jQuery используется для вызова alert и человек не понимает что можно сделать быстрей оптимальнее и проще…
Из мира прикладного программирования встречал я такие примеры когда программа которая показывает окошко «Hello World» тянет за собой 70 мегабайтов библиотек для её запуска (.NET), когда так же программа вписывается в один вызов MessageBox Windows API и занимает в скомпилированном виде 1,3 Кб не теряя функциональности во всех версиях ОС.