автоматическое уведомление в смене базы данных: аналогично запросу facebook friend

Я хочу развить сайт социальной сети php mysql. У зарегистрированных пользователей будет возможность добавить другого пользователя в качестве друга, как это делается в Facebook.

Если пользователь A нажимает на ссылку «добавить друга» в профиль пользователя B, записи друзей-запросов будут сделаны соответственно в базах данных A и B. Когда B посещает ожидающую страницу-запрос-показ-страницу (как таковой на странице профиля), запрос будет показан с запросом db B. Это очень просто сделать, я думаю.

Но пока B находится в сети, C может сделать запрос друга B. Я хочу сделать уведомление B, что C сделал такой запрос, даже если B не обновляет страницу своего профиля (или любую страницу с опцией показывая ожидающие друг-запросы). Что касается типа уведомления, это может быть поле, показывающее общее количество ожидающих запросов друзей. При нажатии на поле будут показаны детали. Или это может быть в любой другой форме.

Моя точка зрения заключается в том, как сделать B осведомленным о новом запросе друга, когда он находится в Интернете, не сделав его / ее обновление страницы, содержащей запросы друзей?

    Related of "автоматическое уведомление в смене базы данных: аналогично запросу facebook friend"

    Чтобы доработать ответы, я предполагаю, что вы хорошо понимаете логику DATA базы данных / уведомлений, и теперь вы обеспокоены только тем, КАК доставить ее в браузер. Я перечислю все пункты здесь.

    1. HTTP – это протокол PULL . Вы не можете передавать данные с сервера на клиент.
    2. Итак, что вы можете сделать – постоянно опроса сервера для новых уведомлений.

    Вы можете сделать два типа опроса: –

    1. Короткие опросы. Вы отправляете запрос Ajax на сервер для новых уведомлений.
      • Это короткий запрос, но вы делаете это непрерывно с интервалом (скажем, 10 с)
      • Сервер обрабатывает PHP и сразу возвращается.
      • Вы обрабатываете возвращенные данные (например, Показывать уведомления)
    2. Длительный опрос – Вы отправляете тот же запрос, что и выше. НО…
      • В этом запрошенный PHP-файл переходит в бесконечный цикл, постоянно проверяя БД.
      • Когда происходит изменение БД, файл PHP «эхо» его и заканчивает цикл. Теперь запрос завершен, и данные получены в браузере.
      • Вы обрабатываете данные.
      • Запустите другой запрос Ajax с большим количеством опросов, и шаги снова повторяются.
      • (Дополнительно: если PHP не завершен в определенный тайм-аут, отмените текущий запрос и запустите его.)

    Затем вы можете реализовать любой из них двумя способами:

    1. Напишите свой собственный код Javascript. Вам нужен определенный опыт, но вы можете это узнать!
    2. Используйте некоторые библиотеки – легко и экономично. Вы можете использовать PubNet , BeaconPush и т. Д.

    Надеюсь, это поможет вам!

    вам нужно написать javascript, который отправляет запрос на сервер после каждого интервала времени. а затем на стороне сервера вы можете запросить базу данных и ответить клиенту, если есть какие-либо новые запросы друзей.

    используйте функцию setinterval javascript

    var refreshId = setInterval(function(){ $.ajax({ type: "POST", url: "request.php", data: 'more_updates='+more_updates, // or any data you want to send cache: false, success: function(html){ $('.old_updates').prepend(html).fadeIn('fast'); // response from server side process } }); } },10000); 

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

    Во-первых, вам не нужно хранить отдельные базы данных / таблицы для каждого человека. Вы можете сохранить одну таблицу базы данных со следующими столбцами:

    table_friendship

     +------+---------------+-------------+------------+ | id | friend_from | friend_to | approved | +------+---------------+-------------+------------+ | 1 | A | B | NO | +------+---------------+-------------+------------+ | 2 | C | B | NO | +------+---------------+-------------+------------+ 

    Здесь в этой таблице запись 1 означает, что A запрашивает B для дружбы и НЕ одобрен. Вступление 2 означает, C просит B для дружбы и НЕ одобрено.

    Следующим шагом является уведомление «B» о том, что на сервер были получены два запроса. К сожалению, сервер не может отправлять сообщения клиенту (браузеру). Итак, что мы делаем, постоянно опроса сервера через запрос AJAX. Запрос работает как любой другой запрос страницы, но разница в том, что вы можете запросить страницу PHP без перезагрузки браузера.

    Вы можете запросить страницу friend_requests.php с интервалом в 10 секунд. Страница должна сделать следующее:

    1. Сделайте SQL "SELECT COUNT(*) FROM table_friendship WHERE friend_to = B AND approved = "NO" (только псевдо-SQL!)
    2. Верните следующие данные: количество ожидающих запросов и новые запросы и т. Д.

    На стороне браузера вы можете отобразить эти данные в «BOX», который вы указали.

    Когда вы одобряете запрос, вы снова отправляете запрос AJAX на другую страницу PHP, чтобы изменить approved колонку на «ДА»,

    Подробнее о Ajax – ru.wikipedia.org/wiki/Ajax_(programming)

    Я думаю, что вы ищете услугу push-уведомления.

    Вы можете либо реализовать свои собственные (используя Comet), либо подписаться на публичную службу.

    Примеры:

    PubNub , BeaconPush

    Вы найдете гораздо больше с Google.

    редактировать

    Я думаю, что мой ответ был недостаточно ясным. С моим предложением вы можете сделать это (используя pubnub):

    Пользователь B (идентификатор пользователя 7) записывает запрос пользователя пользователю A (идентификатор пользователя 8). В вашем обработчике PHP вы делаете:

     $pubnub->publish(array( 'channel' => 'friend_requests_8', 'message' => array( 'request_from' => '7' ) )); 

    Я не очень привык к php, но надеюсь, вы понимаете, что я имею в виду.

    На странице «Клиент» вы можете просто зарегистрироваться на свой канал («friend_request_»), а затем обработать запросы:

     // PUBNUB.subscribe() - LISTEN PUBNUB.subscribe({ channel : "friend_request_<? echo $user_ID; ?>", callback : function(message) { alert('FRIEND REQUEST FROM USER ID: ' + message.request_from) } }) 

    Таким образом, с этим решением вам не придется обрабатывать тайминги или циклы, потому что pubnub обрабатывает это для вас. Facebook делает это (насколько мне известно), а BeaconPush используется EA для Battlelog, который, на мой взгляд, является отличным веб-сайтом с множеством интересных веб-технологий.