Чи можу я замінити Apache на Node.js?


151

У мене є веб-сайт, що працює на CentOS, використовуючи звичайні підозрювані (Apache, MySQL та PHP). З часу запуску цього веб-сайту він розвинувся зовсім небагато, і тепер я хотів би зробити з ним більш химерні речі - а саме сповіщення в режимі реального часу. З того, що я прочитав, Apache погано справляється з цим. Мені цікаво, чи можу я замінити просто Apache на Node.js (тому замість " LAMP " це було б "LNMP").

Я намагався шукати рішення в Інтернеті, але не знайшов. Якщо я правильно інтерпретую те, що я прочитав, здається, що більшість людей говорять про те, що Node.js може замінити і Apache, і PHP разом. У мене дуже багато існуючого коду PHP, тому я вважаю за краще зберегти його.

У випадку, якщо це вже не очевидно, я досить розгублений і міг би скористатися деяким просвітництвом. Дуже дякую!


Мавпа-сервер, можливо, варто заглянути.
TryHarder

Відповіді:


86

Якщо ви готові переписати PHP в JavaScript, то так, Node.js може замінити Apache.

Якщо ви розміщуєте екземпляр Apache або NGINX, що працює у режимі зворотного проксі між вашими серверами та клієнтами, ви можете обробляти деякі запити в JavaScript на Node.js та деякі запити в PHP, розміщеному на Apache, поки ви не зможете повністю замінити весь ваш PHP з кодом JavaScript. Це може бути щасливим середовищем: чи працюють ваші WebSockets в Node.js, більш повсякденні роботи в Apache + PHP.


1
Я вдячний за швидку відповідь! Чи nginx значно перевершує Apache? У мене вже є файл .htaccess, і було б непогано зберегти його. Крім того, я читав, що безглуздо мати Apache пересилати запити до Node.js, тому що ви втрачаєте переваги Node.js, оскільки ви все ще переживаєте Apache. Було б краще, щоб Node.js прослуховував на порту 80 що-небудь у підпапці з назвою "nodejs", і тоді все, що не в цій папці, могло б передати Apache Node.js? Apache міг слухати на іншому порту, наприклад 8000.
Рік

21
@ Rick, я досить близький до видалення власної відповіді; Вузол може використовуватиsendfile , і є модуль для підтримки FastCGI, який може полегшити обслуговування PHP і через Node. Що стосується nginx vs Apache, я завжди був присоскоком для серверів у стилі асинхрон на потокових або багатопроцесорних серверах :), але я знайшов документацію Apache простіше знайти та прочитати. Я б назвав це особистими перевагами, якщо вам не потрібно масштабувати до дивовижних цифр. :)
sarnold

3
@Rick Ви не хочете перенести виробничі матеріали на Node, перш ніж зрозуміти, що це таке і як це працює. Вузол - це не чарівна таблетка, щоб зробити речі швидшими. Парадигма, керована подіями / асинхронізацією, не нова, і є причини, чому вона використовується не для всього. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar

1
@Rick Замість того, щоб думати, що ви повинні замінити те, що у вас є, можливо, краще запустити Node додатково. Не думайте, що є якась причина пропустити все через вузол (?), Це звучить як погана ідея. Просто запустіть вузол на іншому порту чи хості.
Øyvind Skaar

2
@ Øyvind Skaar я згоден. Також для більшості веб-сайтів (наприклад, Wordpress) справжнім вузьким місцем є база даних, а не доступ до файлів. І якщо доступ до файлів є проблемою, кеш - це завжди життєздатне рішення. У будь-якому випадку, для реальної продуктивності PHP-APC - це чортово дешевий трюк.
magallanes

26

Node.js може бути швидшим, ніж Apache завдяки парній / не блокуючій архітектурі, але у вас можуть виникнути проблеми з пошуку модулів / бібліотек, які замінюють частину функцій Apache.

Сам Node.js - це легкий фреймворк низького рівня, який дозволяє відносно швидко створювати серверні речі та частини веб-додатків у режимі реального часу, але Apache пропонує набагато більш широкі параметри конфігурації та "класичні" функції, орієнтовані на веб-сервер.

Я б сказав, що якщо ви не хочете замінити PHP на базі веб-додатків на основі node.js, як express.js, тоді вам слід залишитися з Apache (або подумати про перехід на Nginx, якщо у вас є проблеми з продуктивністю).


11

Я вважаю, що Node.js - це майбутнє у веб-сервісі, але якщо у вас багато існуючого PHP-коду, Apache / MySQL - найкраща ставка. Apache може бути налаштований на проксі-запити до Node.js, або Node.js може прокси-запити до Apache, але я вважаю, що в обох випадках втрачається деяка продуктивність, особливо в першому. Не велика справа, якщо ви не користуєтеся веб-сайтом з дуже високим трафіком.

Я щойно зареєструвався в stackoverflow, і поки не можу коментувати прийняту відповідь, але сьогодні я створив простий скрипт Node.js, який фактично використовує sendfile () для обслуговування файлів через протокол HTTP. (Існуючий приклад, на який посилання на прийняту відповідь використовує лише голий протокол TCP для надсилання файлу, і я не зміг знайти приклад для HTTP, тому я написав це сам.)

Тому я подумав, що хтось може вважати це корисним. Обслуговування файлів через sendfile () виклик ОС не обов'язково швидше, ніж коли дані копіюються через "землю користувача", але в кінцевому рахунку використовується менше процесора та оперативної пам'яті, тим самим можна обробляти більшу кількість з'єднань, ніж класичний спосіб.

Посилання: https://gist.github.com/1350901


2
Хоча це дуже вірно, я все ж вважаю, що якщо ви позбавили апаша вниз, зробите саме те, що ви описуєте, він би працював так само швидко, а якщо ні, то швидше, ніж node.js. Apache робить багато речей, які люди не бачать або насправді розуміють, і якби ви додали всю функціональність цих веб-серверів до node.js, вона працюватиме так само повільно, як і вони. Як простий приклад, мабуть, може бути mynode.js / getfile? File = / etc / shadow
Ралі

8

Попередня публікація ТА, що описує, що саме я кажу (php + socket.io + вузол)

Я думаю, ви могли б встановити сервер вузлів на somehost: 8000 з socket.io і заштрихувати код клієнта socket.io в теги і при мінімальній роботі отримати наявне додаток, що розгойдується з socket.io (дитина в реальному часі), не маючи роботи.

У той час як вузол може бути вашим єдиним сервером бекенда, пам’ятайте, що вузол любить реалізовувати своє ім’я та стати вузлом. Я перевірив розмову деякий час назад, що Райан Дал дав групі користувачів PHP, і він згадав вузол імені, що стосується бачення декількох процесів вузлів, які працюють і спілкуються один з одним.


2

Його LAMP проти MEAN на сьогодні. Для прямого порівняння див. Http://tamas.io/what-is-the-mean-stack .

Звичайно, M, E і A дещо мінливі. Наприклад, новіша коа може замінити (E) xpress.

Однак заміна Apache на Node.js, мабуть, не є правильним способом модернізації веб-стеку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.