Ответ 1
У вас, похоже, проблема с загрузкой сервера, поэтому я сравню соответствующие технологии.
Опрос Ajax: Это самый простой. Вы делаете цикл setTimeout каждые 5 секунд или так часто, чтобы проверять новые сообщения чата или вы устанавливаете iframe для перезагрузки. Когда вы отправляете сообщение, вы также возвращаете новые сообщения, и вещи не должны выходить из строя. Самый большой недостаток этого метода заключается в том, что вы вряд ли будете опросить частоту, соответствующую тому, как часто публикуются сообщения. Либо вы будете опроса слишком быстро, и вы сделаете много дополнительных запросов, или вы будете опробовать слишком медленно, и вы получите куски сообщений за раз, вместо того, чтобы получать их в режиме реального времени. Это, безусловно, самый простой способ.
HTTP Push Это идея о том, что сервер должен сообщать клиенту о появлении новых сообщений, а не о том, что клиент постоянно беспокоит сервер, спрашивая, есть ли еще какие-либо новые. Представьте себе, что родительский водитель и ребенок спрашивают: "Мы еще там?", Вы можете просто сообщить родителям, когда они туда попадут.
Есть пара способов подделать это и сделать это по-настоящему. WebSockets, которые вы упомянули, фактически создают поток между клиентом и сервером и отправляют данные в реальном времени. Это потрясающе, и для 4 из 10 пользователей, у которых есть браузер, который может это сделать, они будут очень взволнованы. У всех остальных будет сломанная страница. Сожалею. Может быть, через пару лет.
Вы также можете подделать технологию push с такими вещами, как длительный опрос. Идея заключается в том, что вы спрашиваете сервер, есть ли какие-либо новые сообщения, и сервер не отвечает до появления нового сообщения или установленного пресета (30 секунд или около того). Это минимизирует количество запросов при использовании известных веб-технологий, поэтому большинство браузеров будут работать с ним. У вас будет высокое соединение concurrency, но они действительно ничего не делают, поэтому он должен иметь слишком высокую стоимость сервера.
Я использовал все это раньше, но в итоге оказался с длинным опросом. Вы можете узнать больше о том, как на самом деле это сделать здесь: Как реализовать базовый "длинный опрос" ?