Создайте целый сайт, используя только веб-порты (через socket.io и node.js, без Ajax)?

Возможно ли это? Кто-нибудь попробовал?

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

с соединением между клиентом и сервером, может ли сервер обрабатывать другие клиенты, подключающиеся к одному и тому же порту?

Ответ 1

Это определенно возможно, но я не пробовал. Вы получите повышение латентности, но усиление полосы пропускания не будет значительным. Реальная проблема не будет сервером (постоянный опрос сервера через AJAX, скорее всего, сложнее на сервере в большинстве случаев), но что AJAX действительно решила много проблем (особенно те, на которые вы столкнетесь, как ваша область действия увеличивается), поэтому вы будете перестраивать много вещей для пользовательского использования.

Если вы на самом деле не работаете с проблемой латентности, я бы предложил использовать стандартный AJAX. Или используйте только WebSockets для той части приложения, которая на самом деле требует низкой задержки, поэтому вы не воссоздаете все колеса.

Да, возможность одновременного подключения нескольких клиентов к одному порту прослушивания возможна и выполняется постоянно (ваш веб-сервер почти наверняка делает это на порту 80, например). Ваш сервер WebSocket должен будет правильно обрабатывать входящие соединения (evented, threaded или multi-process), но это довольно стандартная честность (google "сокет-программирование YOUR_LANGUAGE" ).

Ответ 2

Создайте весь сайт, используя только веб-порты (через socket.io и node.js, no Ajax)? Это возможно? Кто-нибудь попробовал?

Я не слышал об этом, но есть много сайтов, которые интенсивно используют Ajax.

Использование websockets означает, что обмену заголовками нет (например, в запросе Ajax), поэтому есть определенная скорость в скорости страницы дисплей, однако с разъемами вы держите соединение с сервер, даже когда ничего не происходит, это вредно, как количество пользователей увеличивается?

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

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

Вы здесь, но я думаю, если вы используете что-то вроде node.js и не имеете подключений десятков тысяч пользователей, это не будет проблемой.

Ответ 3

Посмотрите на SocketStream: https://github.com/socketstream/socketstream

SocketStream - это новая веб-инфраструктура Node.js, предназначенная для создания веб-страниц в режиме реального времени.

Будет начальная загрузка ресурсов, но WebSockets будет широко использоваться для связи Client ↔ Server.

Ответ 4

Поздний ответ, но...

Недавно я опубликовал свое веб-приложение для развлечений (jounce.space), в котором используется веб-узел для всего, кроме проверки подлинности. Websocket используется как для данных, переданных сервером, так и для инициированных клиентом транзакций.

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

Упругая полоса решает (или минимизирует) проблемы с задержкой, потому что игрок, естественно, ожидает задержки при управлении через резиновую ленту. Сервер запускает модель игры, отправляет обновленные позиции мяча и игровые события каждые 40 мс через websocket. Каждый клиентский компьютер отвечает своей текущей позицией мыши.

Помимо направления в реальном времени игровых данных, сокет также отправляет/получает прибытие и вылет игрока, игровые приемы и чат. Данные форматируются JSON, например. каждые 40 мс это отправляется каждому клиенту:

{

    "frameN": frame_sequence_num,

    "cpuLoad": frame_update_us/frameRate,

    "players":{

        <playerId>:[posX, posY, MouseX, MouseY],

        .

        .

        .

    }

}

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

Jounce.space живет с этого поста. Посетите и "просмотрите источник", чтобы более подробно изучить клиентскую сторону. Er, предупреждение, код еще не хорош; это мешанина ad hocery, но работает хорошо (за исключением MSIE). Сервер, написанный на golang, размещен в openshift.redhat.com.