По совпадению, перечисленные вами варианты перечислены в порядке эффективности, от наименее к наибольшему.
Опрос наименее эффективен. Он будет опрашивать, есть ли сообщения или нет, и вводит задержку между отправкой и получением сообщения другими клиентами.
Длинный опрос лучше; тогда вы можете получить сообщение, когда оно будет отправлено, но тогда может быть небольшая задержка при повторном подключении. Во время этой задержки сообщения не будут доставлены, но в остальном это происходит практически мгновенно.
COMET (не упоминается) лучше, чем длинный опрос, но хуже, чем события, отправленные сервером. Он также должен время от времени переподключаться из-за того, что большинство веб-серверов и браузеров имеют тайм-ауты при подключении, но соединения не нужно восстанавливать всякий раз, когда отправляется сообщение. Как и при длительном опросе, при повторном подключении может быть задержка, но в остальном оно обычно происходит мгновенно.
События, отправленные сервером, аналогичны COMET, но когда они не шиммированы, они имеют встроенную поддержку браузера, поэтому они могут обойти ограничения времени ожидания и должны установить только одно соединение за время своего существования (пока соединение не разорвано) . Еще одним преимуществом является то, что он автоматически переподключается, если соединение разорвано без какого-либо кода на стороне клиента с вашей стороны. Это мгновенно.
WebSockets, безусловно, лучший из всех этих вариантов; ему нужно только одно соединение, и оно дуплексное: вы можете не только получать сообщения через него, но вы также можете отправлять сообщения через него, вместо того, чтобы подключаться к серверу отдельно каждый раз, когда вы хотите отправить сообщение. В отличие от событий, отправленных сервером, для этого требуется дополнительный код: он не выполняет автоматическое повторное подключение в случае разрыва соединения, а реализации на стороне сервера обычно более сложны. Я также не уверен, что вы можете использовать его с Apache/XAMPP. Это мгновенно.
Socket.io — это библиотека, которая поддерживает (почти?) все эти и некоторые другие (например, флэш-сокеты) и абстрагирует их за красивым API, поэтому вам не нужно иметь дело с особенностями поддержки браузерами каждого из них. . Он так же быстр, как транспорт, который он использует, что зависит от браузера, в котором он работает. Это также может сократить количество кода, который вам нужно написать. Однако, если это слишком сложно для вас и вас не интересуют старые браузеры, в этом нет необходимости. Кроме того, он очень любит работать сам по себе. Возможно, вы сможете заставить XAMPP работать с ним через прокси, но опять же, я не знаю, можно ли настроить Apache для пересылки на него веб-сокетов.
person
icktoofay
schedule
08.04.2013