Создать весь сайт, используя только websockets (через socket.io и node.js, без Ajax)? - PullRequest
11 голосов
/ 07 ноября 2011

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

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

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

Ответы [ 4 ]

4 голосов
/ 08 ноября 2011

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

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

Да, возможность одновременного подключения нескольких клиентов к одному порту прослушивания и выполнения всех операцийвремя (ваш веб-сервер почти наверняка делает это на порту 80, например).Ваш сервер WebSocket должен будет обрабатывать входящие соединения должным образом (четные, многопоточные или многопроцессорные), но это в значительной степени стандартная процедура (Google «Программирование сокетов YOUR_LANGUAGE»).

0 голосов
/ 08 июля 2015

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

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

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

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

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

{

    "frameN": frame_sequence_num,

    "cpuLoad": frame_update_us/frameRate,

    "players":{

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

        .

        .

        .

    }

}

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

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

0 голосов
/ 09 ноября 2011

Взгляните на SocketStream: https://github.com/socketstream/socketstream

SocketStream - это новая веб-платформа Node.js, предназначенная для создания одностраничных веб-сайтов в реальном времени.

Тамбудет начальная загрузка ресурсов, но WebSockets будет широко использоваться для связи с клиентом <-> сервером.

0 голосов
/ 08 ноября 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...