Socket.io для приложения в реальном времени - PullRequest
6 голосов
/ 26 июня 2011

Итак, у меня есть еще один проект, который я построил несколько месяцев назад.В настоящее время он использует jquery с ajax и каждые 30 секунд обращается к php-скрипту.Сценарий php запрашивает mysql и возвращает результаты для отображения.В этом приложении человек имеет возможность добавлять / редактировать / удалять записи из БД, а когда он делает список результатов из БД, необходимо обновить список, который он видит.Пока, похоже, он справляется со своей задачей, но, глядя в будущее, БД будет увеличиваться, и в реальном времени потребуется больше, то есть не только обновлять каждые 30 секунд, но как можно быстрее.

Будетsocket.io будет ответом на это?Могу ли я просто использовать socket.io с nodejs для создания сервера и отправки событий для запроса моей базы данных и возврата результатов для отображения?Тогда на стороне клиента просто есть функция, которая вызывает скрипт сокета сервера, как каждую секунду?Будет ли это правильный путь к использованию socket.io?Если да, будет ли проблема с этим процессом, если я запускаю его каждую секунду в отношении ресурсов сервера?

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Будет ли socket.io ответом на это?

Мой ответ таков: socket.io / node.js гораздо лучше справляется с приложениями реального времени, чем PHP в текущей форме.

Тогда на стороне клиента просто есть функция, которая вызывает сокет сервера сценарий как каждую секунду?

В файле node.js вам не следует запрашивать информацию, но вместо этого вы должны передать эту информацию (используйте для этого события redis pubsub или node.js). Я советую вам взглянуть на фрагмент pubsub от меня на stackoverflow.com, чтобы немного объяснить себя. Чтобы код работал, вам нужно установить socket.io 0.6.x (0.6.18), поскольку последний файл socket.io 0.7.x имеет немного другой API.

Если это так, будет ли проблема с этот процесс, если я запускаю его каждую секунду Что касается ресурсов сервера?

Как я уже говорил, перед использованием семантики pubsub. Вы можете, например, использовать:

2 голосов
/ 07 июля 2011

Будет ли socket.io ответом на это? Могу ли я просто использовать socket.io с nodejs для создания сервера и отправки событий для запроса моей базы данных и возврата результатов для отображения? Тогда на стороне клиента просто есть функция, которая вызывает скрипт сокета сервера, как каждую секунду? Будет ли это правильный путь к использованию socket.io? Если это так, будет ли проблема с этим процессом, если я запускаю его каждую секунду в отношении ресурсов сервера?

Если вы хотите что-то в реальном времени. Структура может быть другой.

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

Решение 1. Запросите каждые 30 секунд, чтобы получить в режиме реального времени (То же, что ваш текущий метод)

Решение 2: http Streaming. После того, как запрос сделал на сервер. Сервер может продолжить отправку ответа в браузер. Из-за многих проблем с безопасностью браузера, socket.io родился. Socket.io предоставляет множество методов потоковой передачи, поток htmlfile, запрос xhr, flash ...

Во-вторых, вам нужен сервер, чтобы принять соединение и провести длительный опрос сервисов. Слава Богу ! socket.io сделал эту часть для вас.

В-третьих, самый важный человек! Это данные.

Решение 1: Каждый запрос / триггер Call базы данных db или nosql (SQLserver, mysql, Mongodb). Поверь мне ! Твой ДБ скоро умрет.

Решение 2: Службы обмена сообщениями. Такие услуги, как Redis pub / sub, rabbitQ. Он просто использует подписку и публикует сообщение в очереди. Он использует определенный протокол для публикации сообщений, и они не хранят сообщения, такие как БД. Таким образом, его можно отправить сообщение> 100 000 запросов / секунд! Супер быстро. Вау! Это использование этих услуг может быть решено в режиме реального времени? К сожалению, это немного сложно. Зачем ? Поскольку использовать этот вид услуг вы не можете хранить данные, запрос SQL для настройки ваших данных нужно.

Решение 3: Процесс в памяти. Redis, memcached. Память супер быстрая! Вы можете сохранить свои окончательные результаты отображения в памяти. Память может достигать> 100 тыс. Запросов / сек.

Заключение. Создать действительно веб-приложение в реальном времени, например, Facebook или твитер. Нам нужно применить все решения выше + немного читов. Пример, уведомление о фэйсбуке. Когда вы получаете обновление новостей о друзьях, оно использует службы обмена сообщениями, чтобы публиковать оповещения для всех друзей (не более 5000 человек). Потому что интенсивная публикация замедлит работу сообщений. После этого кеша (Memcached) появляется уведомление о сокращении вызова дб (mysql). Как насчет того, чтобы мы могли получить групповое сообщение с более чем 1 миллионом человек? Конечно, мы публикуем более 1 миллиона человек. Но мы просим 1 миллион человек позвонить нашим последним групповым сообщениям, которые хранятся в памяти.

  • Напоминание: масштабирование вашего сервера важно для достижения цели в реальном времени. Удачи !
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...