Обратная реализация Ajax с использованием php

Я хочу реализовать обратный ajax в своем приложении, использующем PHP и jquery. Я немного погуглил об этом и нашел XAJA, но это, похоже, платное приложение. Есть ли приложение с открытым исходным кодом для того же или кто-то реализовал его?

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

Заранее спасибо.


person Ankit Jaiswal    schedule 31.12.2010    source источник
comment
Вы имеете в виду что-то вроде Comet или веб-сокетов в стиле HTML5?   -  person Marc B    schedule 31.12.2010
comment
Я читал о Comet, но он нуждается в интенсивной поддержке со стороны сервера, и, как я обнаружил, он плохо работает с сервером apache.   -  person Ankit Jaiswal    schedule 31.12.2010
comment
Веб-сокеты в стиле HTML5 кажутся интересными, но нуждаются в поддержке со стороны браузеров. Согласно документу, в настоящее время его поддерживают только сафари и хром?   -  person Ankit Jaiswal    schedule 31.12.2010


Ответы (4)


Я знаю два типа обратного AJAX:
1 – опрос
 2 – отправка

Я думаю, что опрос реализовать проще, просто ваш javascript делает регулярный запрос к серверу каждый временной интервал, и когда у сервера есть какие-то данные для него, он ответит. Это похоже на пинг, и некоторые называют это сердцебиением, но это очень очевидное решение этой проблемы. Однако это может легко перегрузить сервер.

ИЗМЕНИТЬ Простой опрос Пример кода:
Серверная часть:

<?php
//pong.php php isn't my main thing but tried my best!
$obj = new WhatsNew();
$out = "";
if ($obj->getGotNew()){
    $types = new array();
    foreach ($obj->newStuff() as $type)
        {
            $new = array('type' => $type);
            $types[] = $new;
        }

    $out = json_encode($types);
}
else{
    $out = json_encode(array('nothingNew' => true));
}


Клиентская сторона:

function ping(){
    $.ajax(
        {

            url : "pong.php",
            success : function (data){
                data = JSON.parse(data),
                if (data['nothingNew'])
                    return;
                for(var i in data){
                    var type = data[i]['type'];
                    if (type && incomingDataHandlers[type]){
                        incomingDataHandlers[type]();
                    }
                }


        });
}
incomingDataHandlers = {
    comments: function () {
        $.ajax({
            url: "getComments.php",
            method: "GET",
            data: getNewCommentRequsetData() // pass data to the server;
            success : function (data){
                //do something with your new comments
            }
        });
    },
    message: function (){
        $.ajax({
            url: "getMessages.php",
            method: "GET",
            data: getNewMessageRequestData() // pass data to the server;
            success : function (data){
                //do something with your new messages
            }
        });
    }
}
$(docment).ready(function () {
    setInterval(ping, 1000);
})
person Amjad Masad    schedule 31.12.2010
comment
Спасибо amjad, я знаю об этих типах. Я ищу подсказки или указатели на то, как это можно реализовать на самом деле. - person Ankit Jaiswal; 31.12.2010
comment
Я видел ваш код, но это не похоже на пример опроса или нажатия. Это простой пример запроса ajax, повторяющегося через фиксированный интервал. - person Ankit Jaiswal; 31.12.2010

Вы ищете то, что они называют «длинным опросом» — я сделал «длинный опрос php», и я получил этот поток при переполнении стека:

Как реализовать базовый длинный опрос?

person Knubo    schedule 31.12.2010
comment
спасибо кнубо, выглядит хорошо. Тем не менее, у меня есть еще одна хорошая ссылка. Проверьте это ape-project.org/home.html, возможно, это поможет вам в будущем. . - person Ankit Jaiswal; 31.12.2010
comment
Обязательно попробую и ваше решение. - person Ankit Jaiswal; 31.12.2010

вы могли бы использовать веб-сокеты в сочетании с веб-сокетами «flash», потому что почти все браузеры имеют встроенную флэш-память (в среднем около 96%? => http://www.statowl.com/flash.php) => https://github.com/gimite/web-socket-js. Вы можете использовать это вместе с http://code.google.com/p/phpwebsocket/. . Тем не менее я задаюсь вопросом, будет ли производительность хорошей. Если бы все это было возможно, я бы использовал node.js для обратного ajax. http://socket.io — отличный проект для этого!

person Alfred    schedule 31.12.2010

Вы проверили APE?

Это технология потоковой передачи данных в реальном времени, основанная на push, через одно небольшое соединение ajax. Концепция полезна, вы можете воспроизвести то же самое с вашей реализацией на стороне сервера.

person kishu27    schedule 13.03.2012