LINUX.ORG.RU
ФорумTalks

[не холивар] сайт, РНР, С++


0

1

Захотелось мне написать доску объявлений.
Точнее мне нужна доска объявлений, но с кучей странных фич.
Готовые велосипеды весьма далеки от моей задумки (да и, честно говоря, плохо у меня получается качественно и глобально переделывать чужой код)

Поэтому решил писать велосипед самостоятельно.
Однако имея небольшой(без пробела! это не опечатка!) опыт написания больших проектов на PHP+JS, я подумал:«А не написать ли сервер на си, который
будет отдавать по запросу нужные данные, а РНР будет лишь заниматься форматированием HTML страниц».
С серверами я специалист. Писать их умею.

Может я чего не понимаю или не знаю, но мне кажется, что:
при написании логики на си я получу из плюсов:
а) Быстродействие.
б) подконтрольное мне кеширование (еще немного быстродействия)
б1) Внятную и очевидную работу с памятью.
в) Удобный для чтения код
г) Разделение мух и котлет, т.е. логики и отображения без возможности их «временно» перемешать.
д)Возможность написать клиент, работающий на стороне пользователя.

из минусов:
а) Более длительный процесс написания.
б) Сложнее «что-то мелкое сделать и быстренько посмотреть, что же получилось»

Хочу услышать тут мнение РНРников.
Как вы храните нужные данные в течение длительного времени?
Неужели каждый скрипт дергает БД каждый раз?

В общем расскажите что-нибудь по теме...
Хотя можете просто покидаться какашками и поржать.

★★☆

сервер на си, который будет отдавать по запросу нужные данные


Я почему-то думал, что этим занимаются СУБД.

Viglim
()
Ответ на: комментарий от Viglim

Я почему-то думал, что этим занимаются СУБД.


А как быть с нетривиальной обработкой этих данных?

Stahl ★★☆
() автор топика

Данные мы храним в бд. И скрипт дергает бд каждый раз. Запросы кеширует бд, кешируем мы, и еще кешируется статика.

Tark ★★
()

Выкинуть пыхпых, забить на С++, написать сабж на пытоне.

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

Zloddey
()
Ответ на: комментарий от Zloddey

Лучше выбирать те инструменты, которые позволяют это сделать эффективно


К сожалению питон мне не просто непривычен, я даже питоновские листинги видел раз 10 в жизни...

Stahl ★★☆
() автор топика

Описание нужного невнятно, видимо, сам не знаешь, что хочешь.

Проблемы надуманы, решаются легко в пыхе, перле, рельсах и т.д. Затея бессмысленна с си(++).

В общем расскажите что-нибудь по теме...

По какой именно теме? Можно ли на пхп сделать большой проект с хорошим быстродействием? Да.

Reaper ★★
()
Ответ на: комментарий от Stahl

>А как быть с нетривиальной обработкой этих данных?
Если использовать си для нетривиальной обработки данных, то по сравнению с пыхом там уж очень маленький прирост в скорости будет. Зато очень много готовых решений проходит мимо.
Для доски объявлений надо в качестве велосипеда брать нормальный фреймворк. Что-то типа symfony,zenda или той же kohana для начала.
П.С.
реквестирую примеры странных фич

Tark ★★
()
Ответ на: комментарий от Tark

кешируем мы, и еще кешируется статика.


А как в РНР происходит это самое кеширование?
Скрипт отработал, данные утеряны... Где они кешируются?

Stahl ★★☆
() автор топика

Я сначала подумал, что это стихотворение.

yoghurt ★★★★★
()
Ответ на: комментарий от Stahl

Они кешируются в памяти с помощью тулз типа memcached или eaccelerator. Эти тулзы представляют собой маленькие key-value серверы, с которыми идет общение по обычным или юникс сокетам. Ну и статика кэшируется nginx-ом например.

Tark ★★
()

>Быстродействие.

(еще немного быстродействия)

Куда тебе столько? Серьёзно, каналы не резиновые.

Разделение мух и котлет, т.е. логики и отображения без возможности их «временно» перемешать.

Для этого надо урезать пыхпых. Да и вообще его выкинуть. Борда на CGI - вполне реальна (а потом и сервак свой прикрутить, но не всё сразу).

Сложнее «что-то мелкое сделать и быстренько посмотреть, что же получилось»

CGI же. Хелловорлд на си за пять минут пишется.

Неужели каждый скрипт дергает БД каждый раз

Добро пожаловать в реальный мир.

legolegs ★★★★★
()
Ответ на: комментарий от Tark

to Tark:

memcached или eaccelerator.


Я правильно понимаю, что это практически то же, что я хочу написать, но без возможности выноса туда логики?

to Legolegs:

каналы не резиновые.

Я надеюсь на большой трафик.

CGI же. Хелловорлд на си за пять минут пишется.

Мне кажется, что PHP удобен для формирования HTML.
Заниматься парсингом на си? Я может и извращенец, но несколько другого толка:)

Добро пожаловать в реальный мир.

Извините, я кажется заблудился. А где здесь выход?:)

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Не совсем, правда я не совсем понимаю, что вы хотите написать. Эти вещи считай большой динамический ассоциативный массив.
Насчет логики. А собственно какая логика то планируется. Те же CRUD простые делать смысла нет на Си. Всякие связи один-к-одному, один-ко-многим, деревья, суммирование по полям обычно осуществляются базой. Там на сам пых логики то не остается почти. Выгружай себе из базы данные, загружай, да формируй вывод.

Tark ★★
()
Ответ на: комментарий от Stahl

Заниматься парсингом на си?

Зачем? Основные элементы генерирует JavaScript, а данные для их заполнения получает при помощи http-запроса от сишного CGI на сервере. Проверено, работает :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Stahl

>Я надеюсь на большой трафик.

Сколько сотен магабайт html-страниц в секунду?

Мне кажется, что PHP удобен для формирования HTML.

Удобнее, чем printf? Да. Но многие phpшники пишут свои шаблонизаторы. Не спроста, видать.

Заниматься парсингом на си?

Парсингом чего? http? Так оно и так всегда на си.

Извините, я кажется заблудился. А где здесь выход?:)

http://www.linux.org.ru/forum/development/5439798 :)

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

>Удобнее, чем printf?
PHP гОраздо удобнее чем printf. Чтобы через printf вывести даже те же строки таблицы, придется либо писать шаблон в коде, либо использовать костыли.
А smarty и прочие шаблонизаторы нужны в основном за тем, чтобы не путать код и представление, да и вообще перекинуть написание шаблона на верстальщиков.

Tark ★★
()
Ответ на: комментарий от Tark

PHP гОраздо удобнее чем printf

Ну я так и сказал.

чтобы не путать код и представление

Опять же, согласен. Хотя було бы лучше, если бы в php можно было бы включить «ограниченный режим», в котором бы работало

Список:
<ol><? foreach ($list as $elem) { ?>
<li><?=$elem['code'].$elem['name'] ?</li>
<? } ?></ol>

но было бы запрещено

Список:
<ol><? foreach ($list as $elem) { ?>
<li><?
$var = $elem['code']/10;
$elem['used']=true;
echo $var.$elem['name'] ?</li>
<? } ?></ol>

legolegs ★★★★★
()

Начни с PHP - zend/symfony, smarty, + memcached.

Если хорошо разделять логику от view (например с помошю MVC) то потом можеш добавить сервер на C++.

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

Можно использовать lighttpd как веб сервер, хорошо для статики.

koriun
()

в) Удобный для чтения код г) Разделение мух и котлет, т.е. логики и отображения без возможности их «временно» перемешать. д)Возможность написать клиент, работающий на стороне пользователя.

Бред, при нормальной работе на PHP можно сделать всё тоже самое. При разработке на С++ ты получишь гораздо больше геморроя но и потенциально(!) больше возможностей для оптимизации

Dobriy_i_Prostoy
()

> небольшой(без пробела! это не опечатка!)

Дожились, б*ядь... За правильное написание слова уже оправдываются.

one_more_hokum ★★★
()

> А не написать ли сервер на си, который будет отдавать по запросу нужные данные.

Какой именно сервер вы хотите написать (http, бд, кэш) или что-то своё?

И да преждевременная оптимизация корень всех зол.

guilder
()

Вчера наткнулся на то, что диаграммы, которые строил Graphviz, перестали показываться. Через пол-часа разбирательств выяснилось, что dot тупо падает с сегфолтом. Отчего, почему... Переустановил Graphviz - пофиг. Начал долго и нудно разбираться. Оказалось, с некоторых пор он перестал переваривать некорректные значения weight в nodes. Раньше было пофиг, потому ошибка и не всплывала. А сейчас - тупо сегфолт. Вот такой он, сишный софт :)

KRoN73 ★★★★★
()
Ответ на: комментарий от legolegs

Да. Но многие phpшники пишут свои шаблонизаторы.

Во-первых, потому что невалиден код вида

<a href="<?php echo $self->url();?>">ссылка</a>
короче и удобнее писать в духе
<a href="{$self->url()}">ссылка</a>

Во-вторых, потому что часто

{if cond}...{/if}
выглядит приятнее, чем
<?php if(cond):?>
...
<?php endif;?>

В-третьих, не всегда дизайнера можно допускать до PHP.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>потому что невалиден код вида

Невалиден с т.з. php? А почему тогда работает?

выглядит приятнее

Субъективно.

не всегда дизайнера можно допускать до PHP.

Недостаток php, да. Шаблон, конечно и близко нельзя подпускать к тюринг-полноте.

legolegs ★★★★★
()

Бред ты какой-то надумал. Если хочешь разделить мухи и котлеты - пользуй пхп фреймворк + шаблонизатор(например, zend framework+smarty). Хочешь нормальную производительность - правильно спроектируй схему данных. Хочешь удобный для чтения код - пиши его удобным для чтения - это прекрасно получается в пхп. А в предложенном тобой варианте ты найдешь кучу геморроя без видимой выгоды. Доска объявлений - не высоконагруженый сервис и такие велосипеды там принципиально бесполезны.

gear ★★★
()
Ответ на: комментарий от gear

Дада. Кто-то там правильно сказал про паттерны. Тоже помогает мухи и котлеты разделять.

gear ★★★
()

klone+чистый си. выбирай, не ошибешься. Критические моменты оптимизировать на ассемблере можно.

AiFiLTr0 ★★★★★
()

Еслу хочешь совсем по трушному - выкинь PHP, не сильно он тебе поможет при формировании html. Возьми XSL. К примеру libxml2. И да, если уж делать, что бы было быстро, то к базе нужно ходить в неблокирующем режиме. Иначе обидно написать мега быстрый код, который 90% времент будет тупо ждать базу. Насколько знаю постгревая либа по своей природе неблокирующая. Что бы код был человеческий, а не на колбеках, возьми Boost.Coroutine. Я его не пробовал, тока слышал про него. Еслм все получится, покажешь код?

dizza ★★★★★
()
Ответ на: комментарий от KRoN73
<a href="<?= $self->url();?>">ссылка</a>

что значит «невалиден»?

Reaper ★★
()
Ответ на: комментарий от KRoN73

И что с ней не так? Валидатору сгенерированных хтмыл подсовывают, а не серверный скрипт; имакс ;-) все вставки отлично подсвечивает.

Reaper ★★
()
Ответ на: комментарий от KRoN73

В рекурсию вошёл?) Попробуй прочитать мой предыдущий ответ, увидишь, чем я пишу.

Если ты используешь кривой редактор, чьи это проблемы? Подменяешь понятия.

Reaper ★★
()

Если ограничиться рамками PHP, C++, то делается все так.

1. На PHP написан практически весь сайт.

2. Данные хранятся в БД. Она же их и кеширует.

3. На С++ пишется код в очень редких случаях. Дело не в генерации страницы, тут ты ничего не выиграешь. На С++ надо писать когда требуется выполнение длительного, зацикленного на каких-то рассчетах кода. Вот тогда С++ и отдавать данные по вебсервису

а) Быстродействие.

б) подконтрольное мне кеширование (еще немного быстродействия)

Чем тебе не подходит

в) Apache
г) выполнение подконтрольное крутым спецам по серверам из Apache Foundation (дофигища быстродействия и масштабируемости)

vertexua ★★★★★
()

и зачем тебе здесь PHP? вполне можно обойтись JS на клиентах.

isden ★★★★★
()

Уж сколько раз твердили миру...

Никакого смысла сейчас писать Си++ сервера нет. Прироста скорости ты не получишь, ибо всякие PHP, питоны, руби и явы уже давно выполняют аналогичный код с соизмеримой с Си++ скоростью.

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

Кароче, пользуйся теми инструментами, которые для этого предназначены. Сервера Wow написаны на питоне, и ничего, тянут всех своих десятки тыщщ пользователей одновременно.

xintrea
()
Ответ на: комментарий от Reaper

>Если ты используешь кривой редактор, чьи это проблемы?

Неужели есть редактор, валидирующий HTML со встроенным PHP? Пруф!

KRoN73 ★★★★★
()
Ответ на: комментарий от xintrea

А как насчет некоторых «особо специальных случаев»? Или вы на пыхпыхе сможете веб-морду для системы управления, к примеру, телескопом, написать? Или на питоне веб-интерфейс управления «умным домом» забабахаете? А может, на яве интерфейс on-line распознавания изображений?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>Или вы на пыхпыхе сможете веб-морду для системы управления, к примеру, телескопом, написать?

В моей практике была однажды морда на VB3/Win3.1 для управляющего компа станции спутниковой связи :) Вопрос надёжности решался просто: в ЗИПе (не путать с zip'ом) лежала пара настроенных опечатанных системников. Если обнаруживался отказ, то просто менялся системник :)

Ну и, понятное дело, станция прекрасно работала на автомате и без этого управляющего компа, по сути - это был просто GUI-терминал. Основные компоненты станции работали на Форте и машинных кодах.

KRoN73 ★★★★★
()
Ответ на: комментарий от Reaper

>Ви-таки будете удивлены, но это редактор. ;-)

Ну, я слышал про это, так что не очень удивлён. Но искать редактор внутри этого достижения человеческого гения для меня слишком сложно :D

KRoN73 ★★★★★
()
Ответ на: комментарий от xintrea

Нет, ну почему. На плюсах можно написать действительно быстрое приложение, которое будет сильно быстрее, чем если бы на руби/питоне/пхп/джаве. Только знать плюсы нужно на соответсвующем уровне. А умники, переодически задающие вопросы на этом форуме на тему написания веба на С/С++ (они все едины в одном, дескать в плюсах я отец а ваши гавно-руби учить я не буду) толком то и не разбираются в своих полюсах, да и вообще не в чем толком не разбираются. Разбирались бы, глупых вопросов не задавали.

dizza ★★★★★
()
Ответ на: комментарий от Eddy_Em

> Или вы на пыхпыхе сможете веб-морду для системы управления, к примеру, телескопом, написать? Или на питоне веб-интерфейс управления «умным домом» забабахаете? А может, на яве интерфейс on-line распознавания изображений?

Конечно. Интерфейсы управления через WEB - пренепременно на PHP или питоне. А уж интерфейс соединять с расчетной системой. Напрямую систему писать чтоб еще и с вебом работала смысла нет.

xintrea
()
Ответ на: комментарий от xintrea

По-моему, есть: тем более, что не так уж и много надо сделать: всего-то добавить 2 функции, чтобы вместо аргументов командной строки обрабатывать http-запрос.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> По-моему, есть: тем более, что не так уж и много надо сделать: всего-то добавить 2 функции, чтобы вместо аргументов командной строки обрабатывать http-запрос.

Ну, начинай делать. Как сделаешь, так расскажешь. Если не сделаешь, будем считать тебя лоботрясом.

xintrea
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.