Обновление По состоянию на 8-10-2013: отсутствие библиотеки и поддержки для node.js в основном исчезло из-за таких библиотек, как mean.io, в действительности вы можете сами запустить и запуститьматерия или часы.
Ануш, как сказано в двух предыдущих ответах, которые были действительно информативными, у вас есть 2 решения для серверной стороны.
1. Node.js Based 'Event based' server
2. PHP/ASP.net based polling/comet/forever script based server
Насколько мне известно, Node.js и Socket.io имеют очень большое преимущество из-за простоты и цели разработки для веб-приложений реального времени, но затем «Php стабильно мощный», так что вот некоторые из преимуществ и недостатков обеих вышеупомянутых платформ.
PHP : Преимущества :
Стабильность
Мощность
Простота программирования, если вы знакомы с C ++, как бэкэнд
Огромная онлайн-библиотека поддержки (php.net)
Механизмы на PHP для RealTimeAPI с недостатками DrawBacks
Обычно при использовании метода длинных опросов ваш сервер должен обрабатывать n запросов от одного и того же пользователя в секунду.этот 1 запрос содержит 8 КБ данных запроса + файлы cookie, которые необходимо отправить на сервер для получения информации.Это увеличивает нагрузку на сервер, и вы также можете каждый раз авторизовать клиента (для большей безопасности), следовательно, 1 функция авторизации будет также вызываться n раз, что фактически увеличивает нагрузку на сервер.с более низким n вы теряете эпическое реальное время.при более высоком значении n вы создаете миллион запросов для 21 человека за 4 часа.
При использовании Comet вам придется некоторое время держать открытыми запросы и постоянно запрашивать изменения в базе данных или API вашего сервера на предмет измененийв вашей приборной панели.Который блокирует весь сценарий и мятежно увеличивает нагрузку на сервер из-за отсутствия открытых потоков APACHE / IIS.(Comet полагается на Keep Alive Server). Это исключительное решение, если его использовать с мощным сервером, поэтому в зависимости от вашего сервера сделайте мудрый выбор.
При использовании навсегда открытого запроса AJAX.когда вы непрерывно открываете 1 запрос и держите его открытым для прослушивания на стороне сервера, вы снова перегружаете сервер, как в случае 2.Я бы совершенно не рекомендовал это, я написал апплет как этот на http://chats.ws/, не стесняйтесь видеть исходный код и проверять его в console / firebug.но сервер падает, когда на клиенте около 8 человек.
Php Sockets (это одноразовое решение BSD Socket Solution во встроенном php),Проблема здесь в том, что вы будете связаны с несколькими сотнями пользователей.В противном случае это лучшее решение. Так как это дает вам «мощь» и «стабильность» php с простотой использования с веб-сокетами.Для клиента вы можете использовать бесплатный распределенный XMLsocket API . Но вместо этого такие стили лучше пишутся на Java или C ++.
PHP - хороший выбор, если вам требуетсяне очень крутые API-интерфейсы реального времени и лучший язык для написания динамических веб-страниц, но когда дело доходит до написания немного более быстрых приложений, PHP откатывается назад, блокируя сервер и поглощая больше ресурсов.
Теперьвторое решение.
Node.js Node - это серверное программное обеспечение, основанное на событиях, то есть оно действует только тогда, когда происходит событие, например, при запуске Apache или PHP, когда они приходят и сообщают операционной системе хоста, что они будут обрабатывать запросы на конкретном порту, например, на порту 80, теперь они постоянно остаются в памятиесть ресурсы, даже когда они не используются.Как и в случае с кометами / Forever Open Connections, внутренний опрос для извлечения данных из базы данных сохраняет открытый поток APACHE навсегда, поглощая ваши ресурсы, но в случае Node приложение запускает node.js и сообщает операционной системе, что когдазапрос делается на определенный порт, затем он переходит в спящий режим (т.е. ничего не делает и оставляет ОС для его обработки), когда запрос приходит node.js завершает запрос и снова переходит в спящий режим, что означает, что он работает, когда это требуется и включенВ других случаях память остается свободной, а ресурсы, такие как загрузка процессора, невелики.
Node.js является довольно новым и иногда нестабильным, но при правильном написании он невероятно повышает производительность вашего приложения.Он имеет хорошую поддержку, и вы можете посетить чат javascript на chat.stackoverflow.com, чтобы получить помощь среди node.js с socket.io в качестве бэкенда.
Что делает socket.io, так это то, что он позволяетПрограммист, чтобы написать только его / ее приложение, а НЕ основные вещи, необходимые для связи, автоматически обрабатывает методы транспортировки в Ордене
- Web Socket
- Flash Socket.
- JsonP Polling
- XHR POLLING
делая это, он гарантирует, что ваша программа работает с той же скоростью и качеством во всех веб-браузерах и Node.js, что и сервер.
Когда вы изучите node.js, вы поймете, как легко писать вещи, которые были чрезвычайно трудны для php.например, сказать на php навсегда открыть код для отправки пользователю данных, когда они будут доступны из базы данных (скажем, mysql сейчас)
<?php
ob_implicit_flush(true);
set_timeout(0);
$T = 0; // for the first run send all the events
while(true){
$query = mysql_query("select * from database where TimeStamp > ".$T);
if(mysql_num_rows(query)>0){ // That is omg we have an updated thing
$T = microtime(true); // this gives the variable the value of current time stamp
while ($row = mysql_fetch_assoc($query))
{ $result = process($row) // say u have to do some processing on the row
echo json_encode($result); // this will send the JSON formation to your client for faster processing
}
}
}
?>
Теперь вам также нужно что-то для управления вводом в базу данных и так далее, так 1больше файлов в формате .php для ввода.
Вместо этого код node.js, написанный с помощью socket.io, будет выглядеть так:
// Assume all functions are declared.
var io = require("socket.io").listen(82);
io.sockets.on('connection',function(client){
client.on('authorise',function(info){
var signin = Authorise(info); // say the info packet contains information about client user pwd and the Authorise function checks for the data to be true or false and then acts accordingly returns a bool status which is true on success with autorisation_id(a member variablE)for the client and false on failure with the reason on failure in the reason member variable inside the signin object.
socket.emit('authorised',signin);
});
client.on('request',function(data){
var result = process(data);
client.emit('reply',result); // yes you can also send straight javascript objects
});
client.on('some_other_event', function(ev){ // SOmething happend such as some long task completed or some other client send a message that can be sent this way.
client.emit('event',ev);
});
.
.
// and so on
});
On client side a
<script src="server:82/socket.io/socket.io.js"></scirpt>
<script>
var connection = io.connect("server:82");
connection.on('event',function(data){
Process_Event(data); // some function which processes event data
});
connection.on('authorised',function(data){
Auth(data); // Some function which tells client hey you are authroised or not and why not
});
connection.on('reply',function(data){
parse_reply(data); // some function that tells the client what is the reply of the request by server and what it has to do
});
function Authorise(){ // Lets assume its called by some html event
username = document.getElementById('username').value;
password = document.getElementById('password').value;
socket.emit('authorise',{usr:username,pass:password}); // sends the request to server
}
function Request(req) {} // this is a function which is called by some script gives it the request as the parameter when calling
{
socket.emit('request',req); // sends request to server
}
</script>
Если вы еще не заметили, НЕТв последнем цикле for / while (true), и, следовательно, он не блокирует сервер каким-либо образом, это основной способ использования node.js с socket.io поверх php-опросов, сокетов Comet или BSD.
Теперь хорошотвой выбор!Выберите мудрый :), поскольку ваше приложение зависит от него, не стесняйтесь задавать дополнительные сомнения на chat.stackoverflow.com или здесь :)