Websocket или Long Polling (используя AJAX) для обнаружения изменений в базе данных с помощью PHP

Мои исследования

Я потратил часы на изучение всего Google и SO о Websockets и Long Polling, их плюсах и минусах и т.д., но еще не нашел решение clear.

Я прочитал больше статей по этой теме, чем все, что я когда-либо изучал, в том числе (чтобы назвать несколько):

Я также рассмотрел следующее:

Обоснование этого вопроса

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

Поэтому я надеюсь, что один из вас, гениев, любезно предоставит вам время ответить на этот вопрос и поделиться своими блестящими знаниями с остальными из нас: -)

Мой вопрос

Короче говоря, мой вопрос действительно в названии; Если я пытаюсь обнаружить изменения в записи базы данных, лучше ли использовать websocket (socket.io) или длительный опрос (jQuery и AJAX)?

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

Кроме того, могут быть другие способы сделать это, которые лучше или более подходят, если да, пожалуйста, поделитесь ими, я открыт для любых предложений!


Дополнительная информация

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

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

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

Изначально я написал систему, в которой был получен тайм-аут с сервера с помощью javascript, а затем в timeout секунды он опросил бы сервер, чтобы узнать, истек ли срок действия timeout. Я думал, что это было идеально, пока я не понял, что он работает только тогда, когда время на клиентском компьютере совпало со временем на сервере. Поэтому мне пришлось отказаться от этого: - (

В любом случае, я надеюсь, что мой вопрос не слишком локализован, и я с нетерпением жду ваших мнений и ответов. Пожалуйста, не тратьте время на то, чтобы помочь мне с кодом базы данных PHP или кодом jQuery AJAX, если у него нет сложных деталей, поскольку я могу написать эту часть самостоятельно, и на стеке есть много других, которые нуждаются в вашем помогите больше, чем мне. Меня больше интересуют ваши мнения и/или как это сделать с помощью websockets, если они являются лучшим решением: -).

Ответ 1

Здесь лучшее сравнение, которое я видел относительно длинных опросов и API WebSocket:
http://www.websocket.org/quantum.html

Как указано в вышеприведенной статье, API WebSocket намного превосходит длительный опрос (или любую другую псевдо-двунаправленную связь), но одна из недостатков заключается в том, что поддержка браузера все еще не совсем там (IE, наконец, начал поддерживать API WebSocket в IE10).

Таким образом, если вы ищете полнофункциональное двунаправленное решение для связи, используйте API WebSocket, когда он доступен, и вернитесь к длинному опросу Ajax или любому методу кометы, который вы предпочитаете, когда это не так.

Чтобы ответить на ваши вопросы, если вы делаете только случайный запрос на сервер/БД (при этом термин "случайный" является относительным и подвержен тестированию в вашей системе), то простые запросы Ajax должны быть точными. Однако, если вы забиваете сервер с запросами каждые 10 секунд или меньше, то использование API WebSocket определенно идеально.

Чтобы ответить на ваш последний вопрос, SSL на 100% доступен с помощью API WebSocket. Просто используйте протокол wss вместо стандартного протокола ws, и вы там.

Ответ 2

Вы писали частично: "Я пытаюсь обнаружить изменения в записи базы данных...". Там нет ничего в веб-сетях, предназначенных для обнаружения изменения db; что просто не для этого.)

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

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