0

У меня вопрос, что лучше годится для реализации чата php или Node.JS?

2 Answers2

1

на чистом пхп или node.js ты не напишешь чат, можно ajax'ом на JavaScript и php на сервере, но лучше jQuery на клиенте вместо javascript, ну можешь и свой node.js на сервер впихать))

Sleepless
  • 583
  • 2
  • 7
  • 24
  • Ну просто пхп говорят будет сильно тормозить т.к. к примеру взять данные из БД и отправить клиенту и по ка это не сделается типа не перейдет к другому запросу, а вот если таких запросов несколько тысяч то просто пипец, а нод.джеэс в легкою справится с этим, почему?? – Миха Николаев Jan 09 '12 at 21:05
  • трындёжь походу, если бы несколько запросов посылать было нельзя, то пхпэшный сайт было бы невозможно задосить))вон у контакта чаты же вроде на пхп обрабатываются, если не ошибаюсь) – Sleepless Jan 09 '12 at 21:11
  • У них вроде-бы сначала был Jabber, но потом они написали свой сервер для чата с прослойкой Node.JS – Миха Николаев Jan 09 '12 at 21:14
  • 1
    значит ошибаюсь) пишите на node.js)) мне на пхп было бы проще) – Sleepless Jan 09 '12 at 21:18
  • Приведите пример простатоты написания чата на пхп нежели на нод.джээс – Миха Николаев Jan 09 '12 at 21:34
  • это было субъективное мнение) я знаю пхп, потому мне и легче) если вы так не хотите на нём писать, то вопрос темы уже становится риторическим))

    В пхп можно сделать чат ajax'ом который обращается к пхп файлам, разбитым, например: 1 файл - 1 сервис), в каждом: приём GET(например опять же)) ), изъятие данных из базы, вывод - вот и всё, хотя так будет везде по идее

    – Sleepless Jan 09 '12 at 22:19
  • @Sleepless - вы хоть пару строчек на nodejs писали?

    "который обращается к пхп файлам, разбитым, например: 1 файл - 1 сервис), в каждом: приём GET(например опять же)) ), изъятие данных из базы, вывод"

    Это по вашему просто? Да и накладно для сервака "малеха", не находите?

    –  Jan 09 '12 at 22:44
  • @AlexWindHope нет, не писал, если вы не заметили, то написано: МНЕ легче, если упростить обращение к базе, то не капли не трудно, connect($login,"$pas"); $mes = get("mes"); insert("messages",$mes); $rez = $select("messages",""); for ($r = array();$r = mysql_fetch_assoc($rez), echo $r['text']); если тут принятие get-данных сделать функцией get, подключение к базе функцией connect, все mysql_query заменить на select, insert, (т.е. не заменить, а написать конкретные функции), то, чат будет работать так, а на клиенте jQuery, тож код небольшой)))) – Sleepless Jan 10 '12 at 10:15
  • если написание вышеперечисленных функций не считать, но зато потом будет удобнее)) – Sleepless Jan 10 '12 at 10:16
  • Какбы я подразумеваю что БД вообще вынесена в отдельный класс и все инкапсулировано - всеравно php тут не соперник для ноды –  Jan 10 '12 at 10:33
  • 1

    но лучше jQuery на клиенте вместо javascript

    :DD

    – Alex Kapustin Jan 10 '12 at 13:20
  • @shurik имелось ввиду вместо чистого javascript ) – Sleepless Jan 10 '12 at 16:52
  • Вообще реально написать на чистом php сервер сообщений, даже можно использовать сокеты,можно и не использовать сокеты) если реализовать множество функций например сжатие трафика, и многое другое, для сокетов требуется написать нехитрый класс или использовать чужие классы. Все что писали выше типо "Чат с испольованием socket.io пишется не сложнее этого. Причем надо понимать разницу между nodejs и php - nodejs хранит состояние в отличии от php" Это полная ересь, вопрос вы пишите сервер или просто открытие странички? Я подумываю в будующем перейти с php на чистую джаву для написания. – Denis Kotlyarov Nov 21 '15 at 13:45
1

socket.io + nodejs, JQuery вовсе не обязательно.

Использую эту связку вы сможете обеспечить истинную интерактивность при этом значительно сэкономить ресурсы сервера. Насколько я помню у тебя выделенный сервак? Если да то тут имхо без вариантов nodejs.

На php написать не проще ни разу, например простейший telnet чат в nodejs реализовивается примерно так:

var net = require('net');
var clients = [];
net.createServer(function(socket){
    clients.push(socket);
    socket.on('data', function(d) {
        for(var i=0,l=socket.length; i<l; ++i) {
            if(socket[i] !== socket) { socket[i].write(d) }
        }
    });
    socket.on('end', function(socket) {
        clients.splice(clients.indexOf(socket), 1);
    })
}).listen('8088');

Чат с испольованием socket.io пишется не сложнее этого. Причем надо понимать разницу между nodejs и php - nodejs хранит состояние в отличии от php, таким образом чат можно написать вообще без использования базы данных, а при использовании nodejs совместно с socket.io вы получаете полноценный socket API. Таким образом в коде не будет тупого долбания сервера по setInterval.

Вообщем - экономится трафик, экономятся ресурсы сервера, гораздо большая гибкость, гораздо большая скорость разработки, гораздо больше возможностей. Думаю плюсы очевидны.

Из недостатков можно отметить лишь слабую поддержку браузеров opera (если не ошибаюсь 10.63+), но это не является большой проблемой т.к. это единственный слабоподдерживаемый браузер, например ИЕ поддерживается, если не ошибюсь - то-ли с 5.5 версии, то-ли с 6.0 версии(что, согласитесь - очень и очень круто).

@Миха Николаев - если планируешь писать что-либо серьезное или интересное - предлагаю свою помощь.

В любом случае, будь это элементарный слабонагруженый чат или полноценное высоконагруженное чат приложение - nodejs, однозначно, лучше подходит для этих целей, даже если не использовать socket.io (если так важна поддержка оперы 10.63-)

PS: здесь немного hello world кода с использованием nodejs и socket.io

  • Из недостатков можно отметить лишь слабую поддержку браузеров opera (если не ошибаюсь 10.63+), но это не является большой проблемой т.к. это единственный слабоподдерживаемый браузер, например ИЕ поддерживается, если не ошибюсь - то-ли с 5.5 версии, то-ли с 6.0 версии

    Это вы про что ? Про Web-Socket API ?

    в IE 6.0 ??? о_О

    – Alex Kapustin Jan 10 '12 at 13:23
  • именно так –  Jan 10 '12 at 13:32
  • вы наверное шутите, Web-Socket API это детище html5.

    возможно идет речь про какую то эмуляцию WebSocket Api на JS, без использования Flash ?

    – Alex Kapustin Jan 10 '12 at 13:36
  • Даже если это эмуляция, но в коде вам плевать на это и, на деле, работает практически одинково - это имеет какоето значение? –  Jan 10 '12 at 14:24
  • Да, меня интересует техническая сторона этого вопроса. Можете выдернуть JS для IE6 и разместить где то на пастебине ? Заранее благодарен. – Alex Kapustin Jan 10 '12 at 14:34
  • офф сайт, ставите nodejs, подымаете hello world socket.io сервер, смотрите исходники. –  Jan 10 '12 at 17:04