Я хочу развить сайт социальной сети php mysql. У зарегистрированных пользователей будет возможность добавить другого пользователя в качестве друга, как это делается в Facebook.
Если пользователь A нажимает на ссылку «добавить друга» в профиль пользователя B, записи друзей-запросов будут сделаны соответственно в базах данных A и B. Когда B посещает ожидающую страницу-запрос-показ-страницу (как таковой на странице профиля), запрос будет показан с запросом db B. Это очень просто сделать, я думаю.
Но пока B находится в сети, C может сделать запрос друга B. Я хочу сделать уведомление B, что C сделал такой запрос, даже если B не обновляет страницу своего профиля (или любую страницу с опцией показывая ожидающие друг-запросы). Что касается типа уведомления, это может быть поле, показывающее общее количество ожидающих запросов друзей. При нажатии на поле будут показаны детали. Или это может быть в любой другой форме.
Моя точка зрения заключается в том, как сделать B осведомленным о новом запросе друга, когда он находится в Интернете, не сделав его / ее обновление страницы, содержащей запросы друзей?
Чтобы доработать ответы, я предполагаю, что вы хорошо понимаете логику DATA базы данных / уведомлений, и теперь вы обеспокоены только тем, КАК доставить ее в браузер. Я перечислю все пункты здесь.
Вы можете сделать два типа опроса: –
Затем вы можете реализовать любой из них двумя способами:
Надеюсь, это поможет вам!
вам нужно написать 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 секунд. Страница должна сделать следующее:
"SELECT COUNT(*) FROM table_friendship WHERE friend_to = B AND approved = "NO"
(только псевдо-SQL!) На стороне браузера вы можете отобразить эти данные в «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, который, на мой взгляд, является отличным веб-сайтом с множеством интересных веб-технологий.