Вопрос дизайна взаимодействия клиент-клиент?

Хорошо, вот моя ситуация: я ищу лучший подход к дизайну. Я работаю в PHP/Smarty на стороне сервера и HTML/jQuery для стороны клиента, но это не очень важно здесь.

У меня есть эта многопользовательская система на моем сервере. Это своего рода система заказов. Обычный пользователь, назовем его клиентом, может заказать некоторые товары в интернет-магазине. Интернет-магазин содержит товары от нескольких продавцов.

Когда пользователь (клиент) размещает заказ, продавец - также пользователь в системе - должен получить уведомление о наличии нового заказа и подтвердить / отклонить его.

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

Заказы хранятся в базе данных, а также подтверждения заказов.

Единственный способ, о котором я могу думать прямо сейчас, - это постоянно - в короткие промежутки времени с AJAX - проверять новые записи в базе данных, с экрана продавца, и делать то же самое для клиента, когда он / она ждет Подтверждение.

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

То же самое касается клиента, когда он / она ожидает подтверждения. Но это не так важно, потому что это не происходит постоянно. Существует лимит ожидания, когда заказ будет автоматически отклонен, если продавец не ответит.

Я надеюсь, вы понимаете мой вопрос.

3 ответа

Решение

Ответ на аналогичный вопрос здесь об использовании Comet с PHP предполагает, что могут быть некоторые проблемы с нитями Apache, связанными со всеми открытыми соединениями с клиентом.

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

Я также собирался предложить использовать Java, поскольку у Java действительно отличный послужной список для реализации масштабируемой Comet с помощью Continuations. Поддержка преобразования - это пример программного обеспечения для чата, использующего комету и продолжения на веб-сервере Jetty.

Поскольку ваш код написан на PHP, вы можете использовать Querces для запуска PHP-кода на JVM. Кроме того, Querces PHP Benchmarks предлагает быстрее, чем Apache, что дает вам дополнительные преимущества. Проверьте проект Querces для получения дополнительной информации.

ОБНОВЛЕНИЕ: Я предлагаю вам сделать свои собственные тесты или исследовать проблему скорости самостоятельно, так как может быть некоторая информация, которая может предложить Apache быстрее. Если вы используете Querces, важно понимать, что вы, по сути, будете писать Java, который выглядит просто как PHP. Таким образом, я бы также предложил провести дополнительные исследования, чтобы вы поняли преимущества и недостатки этого подхода.

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

Вариант опроса кажется более привлекательным по нескольким причинам.

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

Идея опроса также предоставляет API в стиле REST, что делает область опроса полностью независимой от браузера. Вы можете обнаружить, что в дальнейшем продавцы вашей системы предпочтут иметь собственное приложение или даже приложение для iPhone/Android. REST API позволит вам сделать это из любого приложения, которое может сделать HTTP-запрос.

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

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

Вы также можете посмотреть на Node.js, чтобы запустить его по сторонам Apache.

Другие вопросы по тегам