Сценарий: данные об обновлении бэкэнд направляются к клиенту (часть Java использует сервер Tomcat).
Есть много решений для продвижения данных в бэкэнд, таких как опрос, комета и WebSocket.
1. Опрос - это самая низкая стоимость разработки для бэкэнда, что означает обработку запросов AJAX и возврата данных традиционным способом. Когда я учился в школе, лабораторные проекты всегда использовали опрос, потому что он самый безопасный и легкий для реализации. Однако трата коммуникационных ресурсов, вызванных опросом, не может быть проигнорирована. Независимо от того, изменяются ли данные или нет, запрос будет отправлен и отвечен как обычно, и каждый HTTP -запрос будет иметь длинную информацию.
2. Концепция кометы - длинная связь. После того, как клиент отправляет запрос, бэкэнд сохраняет подключение до тех пор, пока подключение времени не возвращает данные, а затем восстанавливает соединение, эффективно передавая ресурсы связи на сервер, что фактически потребляет ресурсы сервера.
3. WebSocket-это полнодуплексная коммуникационная технология, предоставляемая HTML5. Он реализует связь между клиентом и сервером через «рукопожатие». У этого есть хорошая производительность в реальном времени и небольшая голова. В настоящее время поддерживаемые браузеры следующие:
Идеальная ситуация состоит в том, чтобы использовать комбинацию WebSocket и Comet и использовать метод Comet для понижения браузеров, таких как IE8. Но таким образом, бэкэнд должен реализовать две логики для обработки запросов, а именно WebSocket и Comet. Таким образом, эта статья добавила node.js. Причина для этого состоит в том, чтобы перенести логику, которая обрабатывает WebSocket (или Comet) к части Node.js, а не «вызывает проблемы» с бэкэнд, потому что в реальных ситуациях разработчикам нелегко продвигать застройщики. Node.js - это промежуточный слой для связи между браузером и слоем бизнес -логики Java, подключение клиента к Tomcat и общение с Tomcat через сокет (это сокет, а не WebSocket, а бэкэнд должен реализовать интерфейс сокета.
На клиенте WebSocket и Comet реализуются через socket.io. Socket.io выберет соответствующий метод реализации (WebSocket, Long Pull ..) для разных версий браузера или разных клиентов. Внедрение Socket.io позволяет легко обрабатывать WebSocket (или длинное соединение). Сокет.io
Клиент представляет Socket.io:
<script src = "static/js/socket.io.js"> </script>
Клиент код JavaScript:
var socket = io.connect ('127.0.0.1:8181'); // Отправить данные на Server Socket.emit ('fromWebClient', jsondata); // получение данных с Server Socket.on ('pushtowebclient', function (data) {// do Sth.});Код сервера Node.js:
var http = require ('http'), app = http.createserver (). Слушай ('8181'), io = require ('socket.io'). Слушайте (app); io.sockets.on ('connection', function (socketio) {// получение данных от клиента socketio.on ('fromwebclient', function (webclientdata) {// do sth.}); // client отключить socketio.on ('disnonnect', function () {console.log ('Disconnected от клиента); socketio.emit ('pushtowebclient', jsondata);Установление хорошего соединения между клиентом и сервером Node.js является только первым шагом. Следующее также требует установления соединения между сервером Node.js и уровнем Java Business Logic. В настоящее время сервер Node.js служит клиентом для отправки запроса на соединение TCP в Tomcat. После успешного соединения сервер Node.js и Tomcat устанавливают полный дуплексный канал, и он единственный. Независимо от того, сколько запросов клиентов, они пересылаются с сервера Node.js в Tomcat; Точно так же данные, нажатые Tomcat, также распределяются по каждому клиенту через сервер Node.js.
Здесь возникает проблема, то есть после установки подключений WebSocket и подключений к сокетам, два соединения блокируются. Tomcat не знает, какое соединение WebSocket отправило данные, и не знает, какой клиент отправил данные. Конечно, node.js может использовать идентификатор сеанса для отправки в Tomcat, чтобы определить, какой это клиент, но в этой статье используется другой метод.
Когда клиент устанавливает соединение WebSocket с Node.js, каждое соединение будет содержать экземпляр, который называется Socketio здесь. У каждого сокета есть атрибут ID, чтобы уникально идентифицировать это соединение, которое называется Socket_id здесь. Используя Socket_id, на сервере Node.js устанавливается таблица отображения для хранения отношения отображения между каждым сокетом и Socket_id. Когда сервер node.js отправляет данные в Tomcat, сокетовой_ид доставляется с ним, а затем часть Java выполняет серию обработки, а затем инкапсулирует различные данные, требуемые каждым клиентом, и возвращает их. Возвращенные данные должны иметь соответствующую связь с socket_id. Таким образом, когда сервер node.js получает данные, отправленные Tomcat, он распределяется для разных клиентов с помощью разных сокетов через вышеупомянутую таблицу картирования.
Код сервера Node.js:
var http = require ('http'), net = require ('net'), app = http.createserver (). Слушай ('8181'), io = require ('socket.io'). Listen (app), nodeserver = new net.socket (); // подключиться к Tomcat nodeserver.connect (8007, '127.0.0.1', function () {console.log ('connect');}); // сохранить экземпляр подключения к подключению клиента var asocket = {}; // Создать соединение с клиентом io.sockets.on ('connection', function (socketio) {// получение данных от клиента и отправить их в tomcat socketio.on ('fromwebclient', function (webclientdata) {// хранить в таблице картирования Asocket [socketio.id] = socketio; // Добавить сокет_да. socketio.id; }); // Получать данные от tomcat nodeserver.on ('data', function (data) {var jsondata = json.parse (data.tostring ()); // Распределить данные клиенту для (var i in jsondata.list) {asocket [jsondata.list [i] ['sid']]. jsondata.list [i] .data);Приведенный выше код пропускает некоторую логику, такие как данные, полученные сервером Node.js от Tomcat, разделены на два типа, один из них - нажатые данные, а другой - это данные, отвечающие на запрос. Здесь наталкиваемые данные равномерно обрабатываются.
При обработке связи данные, отправляемые Node.js Tomcat, находятся в строковом формате, и данные, полученные от Tomcat, представляют собой буферный объект (восемь байтов), который необходимо преобразовать в строку, а затем преобразован в JSON и отправлены клиенту.
Эта статья просто приводит простой пример таких двух соединений, и многие вещи должны быть добавлены в конкретный бизнес. Поскольку Node.js вводится в проект, фронт-конечности необходимо предпринять больше вещей, таких как обработка, кэширование и даже добавление большой бизнес-логики.