SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Темы лекции: Real-time веб приложения.
Практическое задание: Real-time веб приложение.
Тренер: Игорь Шкулипа, к.т.н.
JavaScript. Базовый курс
Занятие 9
http://www.slideshare.net/IgorShkulipa 2
Real-time веб приложения
Основной отличительной способностью сервисов, которые можно назвать
real-time веб-приложениями является то, что они “ломают” привычную
нам всем модель работы в вебе – запрос-ответ, благодаря чему
пользователи видят обновление данных сразу же, как только они
появляются на сервере.
Если не знать, насколько далеко вперед шагнули технологии за
последние несколько лет, то можно предположить, что все подобные
приложения реализованы при помощи периодического опрашивания
сервера обычными Ajax-запросами, т.н. polling. Выглядит похоже, но
это не совсем так.
http://www.slideshare.net/IgorShkulipa 3
Способы реализации
Техника Описание Преимущества Недостатки
Polling Постоянный опрос
сервера Ajax-
запросами
+ простота реализации
+ поддержка во всех
современных браузерах
- задержка в
результатах
- при уменьшении
задержки
существенно
увеличивается
нагрузка на
сервер
Long
Polling
Ajax-запросы,
идущие один за
другим, но каждый
запрос держится
открытым в
течение нескольких
минут
+ сниженная нагрузка
на сервер по
сравнению с обычным
Polling
+ уменьшенный трафик
+ поддержка во всех
современных браузерах
- больше
одновременно
открытых
соединений, т.к.
каждый запрос
живет дольше
http://www.slideshare.net/IgorShkulipa 4
Способы реализации
Техника Описание Преимущества Недостатки
Server-Sent
Events
Новый стандарт
HTML5, работающий
поверх HTTP.
Позволяет
создавать
долгоживущее
соединение с
сервером, чтобы
сервер мог
отправлять данные
на клиент
+ нет
необходимости
постоянно
пересоединяться с
сервером
+ нет изменений на
стороне сервера,
поэтому работает на
всех современных
веб-серверах
- не
поддерживается в
IE (даже в IE10)
- работает только
в направлении
сервер –> клиент
(на сервер можно
отправлять
обычные Ajax
запросы)
WebSockets Новый протокол
(ws:// и wss://),
работающий поверх
TCP на одном
уровне с HTTP.
Позволяет
создавать
двустороннее
долгоживущее
соединение с
клиентом
+ нет
необходимости
постоянно
пересоединяться с
сервером
+ работает в
двустороннем
режиме
- поддерживается
не во всех веб-
серверах (IIS8)
- поддерживается
не во всех
браузерах (в IE7-
9, Android)
http://www.slideshare.net/IgorShkulipa 5
WebSocket
Протокол WebSocket (стандарт RFC 6455) предназначен для решения
любых задач и снятия ограничений обмена данными между браузером
и сервером.
Он позволяет пересылать любые данные, на любой домен, безопасно и
почти без лишнего сетевого трафика.
http://www.slideshare.net/IgorShkulipa 6
WebSocket
WebSocket — современное средство коммуникации. Кросс-доменное,
универсальное, безопасное.
На текущий момент он работает в браузерах IE10, FF11, Chrome 16, Safari
6, Opera 12.5. В более старых версиях FF, Chrome, Safari, Opera есть
поддержка черновых редакций протокола.
Там, где вебсокеты не работают — обычно используют другие
транспорты.
Есть и готовые библиотеки, реализующие функционал COMET с
использованием сразу нескольких транспортов, из которых вебсокет
имеет приоритет. Как правило, библиотеки состоят из двух частей:
клиентской и серверной.
Например, для Node.JS одной из самых известных библиотек является
Socket.IO.
К недостаткам библиотек следует отнести то, что некоторые продвинутые
возможности WebSocket, такие как двухсторонний обмен бинарными
данными, в них недоступны. С другой — в большинстве случаев
стандартного текстового обмена вполне достаточно.
http://www.slideshare.net/IgorShkulipa 7
NodeJS
Node или Node.js — программная платформа, основанная на движке V8
(транслирующем JavaScript в машинный код), превращающая JavaScript из
узкоспециализированного языка в язык общего назначения.
Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-
вывода через свой API (написанный на C++), подключать другие внешние
библиотеки, написанные на разных языках, обеспечивая вызовы к ним из
JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но
есть возможность разрабатывать на Node.js и десктопные оконные приложения
(при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже
программировать микроконтроллеры (например, tessel и espruino). В основе
Node.js лежит событийно-ориентированное и асинхронное (или реактивное)
программирование с неблокирующим вводом/выводом.
Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет
экспериментирования над созданием серверных веб-компонентов. В ходе своих
исследований он пришёл к выводу, что вместо традиционной модели
параллелизма на основе потоков следует обратиться к событийно-
ориентированным системам. Эта модель была выбрана из-за простоты, низких
накладных расходов (по сравнению с идеологией «один поток на каждое
соединение») и быстродействия. Целью Node является предложить «простой
способ построения масштабируемых сетевых серверов».
http://www.slideshare.net/IgorShkulipa 8
Ссылки
http://nodejs.org/
http://www.nodebeginner.ru/
http://www.slideshare.net/IgorShkulipa 9
Пример. Самый простой сервер
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/plain” });
response.end("Hello, World from NodeJS");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 10
Пример. Чат. Сервер. chatserver.js
var ws = require("nodejs-websocket");
var server = ws.createServer(function (connection) {
connection.on("text", function (message) {
console.log("Message Received");
server.connections.forEach(function (conn) {
conn.sendText(message);
console.log("Message Sent");
});
})
}).listen(12345)
Необходимо
доустановить
пакет
для Node.js
http://www.slideshare.net/IgorShkulipa 11
Пример. Чат. Клиент. HTML
<!DOCTYPE html> <html> <head>
<title>JavaScript OOP Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/site.css" type="text/css" />
<script type="text/javascript" src="js/functions.js"> </script>
<script type="text/javascript" src="js/chatclient.js"> </script>
<body>
<div id="page">
<div id="head">
<div id="logo">
<img src="img/logo.png" height="94" width="100" alt="logo">
</div>
<div id="title">JavaScript OOP Example</div>
</div>
<div class="main">
<div class="innermain">
<div id="menu" class="menu">
<a href="#" id="mi1" class="menuitem">Chat</a>
</div>
<div id="content" class="content">
</div> </div> </div>
<div id="foot">
<p onmouseover="this.className = 'pmouseover'"
onmouseout="this.className = 'pmouseout'">
Move Closer to Change the Style</p>
</div> </div>
http://www.slideshare.net/IgorShkulipa 12
Пример. Чат. Клиент. HTML
<script type="text/javascript">
var mi1 = document.getElementById("mi1");
mi1.addEventListener("click", ChatMenuItemClick, false);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 13
Пример. Чат. Клиент. functions.js
function Show(element) {
element.setAttribute("style", "visibility:visible");
}
function Hide(element) {
element.setAttribute("style", "visibility:hidden");
}
String.format = function () {
// The string containing the format items (e.g. "{0}")
// will and always has to be the first argument.
var theString = arguments[0];
// start with the second argument (i = 1)
for (var i = 1; i < arguments.length; i++) {
// "gm" = RegEx options for Global search (more than one instance)
// and for Multiline search
var regEx = new RegExp("{" + (i - 1) + "}", "gm");
theString = theString.replace(regEx, arguments[i]);
}
return theString;
}
http://www.slideshare.net/IgorShkulipa 14
Пример. Чат. Клиент. chatclient.js
ChatUI = {
// Айдишники элементов интерфейса
GlobalChatDivID: "",
WelcomeHeaderID: "welcomeHeader",
LoginDivID: "loginDiv",
LoginTextBoxID: "usernameText",
LoginButtonID: "connectButton",
MainChatDivID: "mainChatDiv",
InputMessageDivID: "inputMessageDiv",
InputMessageTextBoxID: "inputMessageText",
InputMessageButtonID: "inputMessageButton",
MessagesDivID: "messagesDiv",
MessagesListID: "messagesList",
//Заголовки
MainHeaderText: "Chat",
ConnectButtonText: "Connect",
SendButtonText: "Send",
// Сообщения
WelcomeMessageText: "Welcome, {0}!",
InputNameMessageText: "You must input the name!",
InputMessageMessageText: "You must input message!",
ConnectedToChatMessageText: "Connected!",
ErrorMessageText: "An Error Occured!",
http://www.slideshare.net/IgorShkulipa 15
Пример. Чат. Клиент. chatclient.js
// Пользовательский интерфейс
GetWelcomeHeader: function () {
return String.format("<h2 id="{0}">{1}</h2>",
ChatUI.WelcomeHeaderID,
ChatUI.MainHeaderText);
},
GetLoginDiv: function () {
return String.format("<div id="{0}" class="container">" +
"<input type="text" id="{1}" />" +
"<input type="button" id="{2}" value="{3}" /></div>",
ChatUI.LoginDivID,
ChatUI.LoginTextBoxID,
ChatUI.LoginButtonID,
ChatUI.ConnectButtonText);
},
GetMainChatDiv: function () {
return String.format("<div id="{0}"><div id="{1}" class="container">" +
"<input type="text" id="{2}" />" +
"<input type="button" id="{3}" value="{4}" /></div>" +
"<div id="{5}" class="container">" +
"<ul id="{6}"></ul></div></div>",
ChatUI.MainChatDivID,
ChatUI.InputMessageDivID,
ChatUI.InputMessageTextBoxID,
ChatUI.InputMessageButtonID,
ChatUI.SendButtonText,
ChatUI.MessagesDivID,
ChatUI.MessagesListID);
},
http://www.slideshare.net/IgorShkulipa 16
Пример. Чат. Клиент. chatclient.js
// Добавление сообщения в список
AddMessageToUI: function (name, message) {
$(ChatUI.MessagesListID).innerHTML += String.format("<li><strong>{0}</strong>:
{1}</li>", name, message);
},
// Обработчики кнопок
LoginButtonClick: function () {
ChatEngine.UserName = $(ChatUI.LoginTextBoxID).value;
if (ChatEngine.UserName.length > 0) {
Show($(ChatUI.MainChatDivID));
Hide($(ChatUI.LoginDivID));
$(ChatUI.WelcomeHeaderID).innerHTML =
String.format(ChatUI.WelcomeMessageText, ChatEngine.UserName);
ChatEngine.StartChat();
}
else {
alert(ChatUI.InputNameMessageText);
}
},
SendMessageButtonClick: function () {
var message = $(ChatUI.InputMessageTextBoxID).value;
if (message.length > 0) {
ChatEngine.SendMessageToServer(message);
$(ChatUI.InputMessageTextBoxID).value = "";
}
else {
alert(ChatUI.InputMessageMessageText);
}
},
http://www.slideshare.net/IgorShkulipa 17
Пример. Чат. Клиент. chatclient.js
ShowUI: function (divID) {
ChatUI.GlobalChatDivID = divID;
$(ChatUI.GlobalChatDivID).innerHTML =
ChatUI.GetWelcomeHeader() +
ChatUI.GetLoginDiv() +
ChatUI.GetMainChatDiv();
Hide($(ChatUI.MainChatDivID));
Show($(ChatUI.LoginDivID));
},
BindEventHandlers: function () {
$(ChatUI.LoginButtonID).addEventListener("click",
ChatUI.LoginButtonClick, false);
$(ChatUI.InputMessageButtonID).addEventListener("click",
ChatUI.SendMessageButtonClick, false);
}
}
http://www.slideshare.net/IgorShkulipa 18
Пример. Чат. Клиент. chatclient.js
ChatMessage = {
Divider: ":-:",
User: "",
Message: "",
ToString: function () {
return this.User + this.Divider + this.Message;
},
FromSring: function (str) {
this.User = str.substring(0, str.indexOf(this.Divider));
this.Message = str.substring(str.indexOf(this.Divider) +
this.Divider.length);
}
};
http://www.slideshare.net/IgorShkulipa 19
Пример. Чат. Клиент. chatclient.js
ChatEngine = {
ServerAddress: "",
Connection: Object,
UserName: "",
StartChat: function () {
window.WebSocket = window.WebSocket || window.MozWebSocket;
ChatEngine.Connection = new WebSocket("ws://" + ChatEngine.ServerAddress);
ChatEngine.Connection.onopen = function () {
alert(ChatUI.ConnectedToChatMessageText);
};
ChatEngine.Connection.onerror = function (error) {
alert(ChatUI.ErrorMessageText);
};
ChatEngine.Connection.onmessage = function (message) {
ChatMessage.FromSring(message.data)
ChatUI.AddMessageToUI(ChatMessage.User, ChatMessage.Message);
};
},
SendMessageToServer: function (message) {
ChatMessage.User = ChatEngine.UserName;
ChatMessage.Message = message;
ChatEngine.Connection.send(ChatMessage.ToString());
}
};
http://www.slideshare.net/IgorShkulipa 20
Пример. Чат. Клиент. chatclient.js
function ChatMenuItemClick() {
ChatUI.ShowUI("content");
ChatUI.BindEventHandlers();
ChatEngine.ServerAddress = "127.0.0.1:12345";
}
http://www.slideshare.net/IgorShkulipa 21
Пример. Результат
http://www.slideshare.net/IgorShkulipa 22
Пример. Результат
http://www.slideshare.net/IgorShkulipa 23
Пример. Результат
http://www.slideshare.net/IgorShkulipa 24
Пример. Результат
http://www.slideshare.net/IgorShkulipa 25
Лабораторная работа №6.
Добавить чат на персональную страницу

Weitere ähnliche Inhalte

Was ist angesagt?

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляцииRoman Dvornov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackAlexey Ivanov
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOMRoman Dvornov
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Roman Dvornov
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineVolha Banadyseva
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 

Was ist angesagt? (20)

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
Как построить DOM
Как построить DOMКак построить DOM
Как построить DOM
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 

Andere mochten auch

C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογιαMANOLIS MORAITIS
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουMANOLIS MORAITIS
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaila Jaleel
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculturevijay bhosekar
 
Production diary 19
Production diary 19Production diary 19
Production diary 19Laila Jaleel
 
Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15hebronnhwebmaster
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 

Andere mochten auch (20)

C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
αφηγηματολογια
αφηγηματολογιααφηγηματολογια
αφηγηματολογια
 
Challenge 11
Challenge 11Challenge 11
Challenge 11
 
Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένου
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theory
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculture
 
5 niveles de prevension
5  niveles de prevension5  niveles de prevension
5 niveles de prevension
 
Catalog AdPro
Catalog AdProCatalog AdPro
Catalog AdPro
 
CONSTRUCTION DOCS_FINAL TO PRINT
CONSTRUCTION DOCS_FINAL TO PRINTCONSTRUCTION DOCS_FINAL TO PRINT
CONSTRUCTION DOCS_FINAL TO PRINT
 
Production diary 19
Production diary 19Production diary 19
Production diary 19
 
Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15Hebron NH Academy Building Presentation 02-17-15
Hebron NH Academy Building Presentation 02-17-15
 
Km1
Km1Km1
Km1
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 

Ähnlich wie JavaScript Базовый. Занятие 09.

Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3JIuc
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePointVitaly Baum
 

Ähnlich wie JavaScript Базовый. Занятие 09. (20)

Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Dreamwever cs3
Dreamwever cs3Dreamwever cs3
Dreamwever cs3
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 

Mehr von Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.Igor Shkulipa
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.Igor Shkulipa
 

Mehr von Igor Shkulipa (16)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Web. Занятие 06.
C# Web. Занятие 06.C# Web. Занятие 06.
C# Web. Занятие 06.
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
C# Desktop. Занятие 13.
C# Desktop. Занятие 13.C# Desktop. Занятие 13.
C# Desktop. Занятие 13.
 

JavaScript Базовый. Занятие 09.

  • 1. Темы лекции: Real-time веб приложения. Практическое задание: Real-time веб приложение. Тренер: Игорь Шкулипа, к.т.н. JavaScript. Базовый курс Занятие 9
  • 2. http://www.slideshare.net/IgorShkulipa 2 Real-time веб приложения Основной отличительной способностью сервисов, которые можно назвать real-time веб-приложениями является то, что они “ломают” привычную нам всем модель работы в вебе – запрос-ответ, благодаря чему пользователи видят обновление данных сразу же, как только они появляются на сервере. Если не знать, насколько далеко вперед шагнули технологии за последние несколько лет, то можно предположить, что все подобные приложения реализованы при помощи периодического опрашивания сервера обычными Ajax-запросами, т.н. polling. Выглядит похоже, но это не совсем так.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Способы реализации Техника Описание Преимущества Недостатки Polling Постоянный опрос сервера Ajax- запросами + простота реализации + поддержка во всех современных браузерах - задержка в результатах - при уменьшении задержки существенно увеличивается нагрузка на сервер Long Polling Ajax-запросы, идущие один за другим, но каждый запрос держится открытым в течение нескольких минут + сниженная нагрузка на сервер по сравнению с обычным Polling + уменьшенный трафик + поддержка во всех современных браузерах - больше одновременно открытых соединений, т.к. каждый запрос живет дольше
  • 4. http://www.slideshare.net/IgorShkulipa 4 Способы реализации Техника Описание Преимущества Недостатки Server-Sent Events Новый стандарт HTML5, работающий поверх HTTP. Позволяет создавать долгоживущее соединение с сервером, чтобы сервер мог отправлять данные на клиент + нет необходимости постоянно пересоединяться с сервером + нет изменений на стороне сервера, поэтому работает на всех современных веб-серверах - не поддерживается в IE (даже в IE10) - работает только в направлении сервер –> клиент (на сервер можно отправлять обычные Ajax запросы) WebSockets Новый протокол (ws:// и wss://), работающий поверх TCP на одном уровне с HTTP. Позволяет создавать двустороннее долгоживущее соединение с клиентом + нет необходимости постоянно пересоединяться с сервером + работает в двустороннем режиме - поддерживается не во всех веб- серверах (IIS8) - поддерживается не во всех браузерах (в IE7- 9, Android)
  • 5. http://www.slideshare.net/IgorShkulipa 5 WebSocket Протокол WebSocket (стандарт RFC 6455) предназначен для решения любых задач и снятия ограничений обмена данными между браузером и сервером. Он позволяет пересылать любые данные, на любой домен, безопасно и почти без лишнего сетевого трафика.
  • 6. http://www.slideshare.net/IgorShkulipa 6 WebSocket WebSocket — современное средство коммуникации. Кросс-доменное, универсальное, безопасное. На текущий момент он работает в браузерах IE10, FF11, Chrome 16, Safari 6, Opera 12.5. В более старых версиях FF, Chrome, Safari, Opera есть поддержка черновых редакций протокола. Там, где вебсокеты не работают — обычно используют другие транспорты. Есть и готовые библиотеки, реализующие функционал COMET с использованием сразу нескольких транспортов, из которых вебсокет имеет приоритет. Как правило, библиотеки состоят из двух частей: клиентской и серверной. Например, для Node.JS одной из самых известных библиотек является Socket.IO. К недостаткам библиотек следует отнести то, что некоторые продвинутые возможности WebSocket, такие как двухсторонний обмен бинарными данными, в них недоступны. С другой — в большинстве случаев стандартного текстового обмена вполне достаточно.
  • 7. http://www.slideshare.net/IgorShkulipa 7 NodeJS Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода- вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом. Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно- ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».
  • 9. http://www.slideshare.net/IgorShkulipa 9 Пример. Самый простой сервер var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/plain” }); response.end("Hello, World from NodeJS"); }).listen(12345);
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пример. Чат. Сервер. chatserver.js var ws = require("nodejs-websocket"); var server = ws.createServer(function (connection) { connection.on("text", function (message) { console.log("Message Received"); server.connections.forEach(function (conn) { conn.sendText(message); console.log("Message Sent"); }); }) }).listen(12345) Необходимо доустановить пакет для Node.js
  • 11. http://www.slideshare.net/IgorShkulipa 11 Пример. Чат. Клиент. HTML <!DOCTYPE html> <html> <head> <title>JavaScript OOP Example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="css/site.css" type="text/css" /> <script type="text/javascript" src="js/functions.js"> </script> <script type="text/javascript" src="js/chatclient.js"> </script> <body> <div id="page"> <div id="head"> <div id="logo"> <img src="img/logo.png" height="94" width="100" alt="logo"> </div> <div id="title">JavaScript OOP Example</div> </div> <div class="main"> <div class="innermain"> <div id="menu" class="menu"> <a href="#" id="mi1" class="menuitem">Chat</a> </div> <div id="content" class="content"> </div> </div> </div> <div id="foot"> <p onmouseover="this.className = 'pmouseover'" onmouseout="this.className = 'pmouseout'"> Move Closer to Change the Style</p> </div> </div>
  • 12. http://www.slideshare.net/IgorShkulipa 12 Пример. Чат. Клиент. HTML <script type="text/javascript"> var mi1 = document.getElementById("mi1"); mi1.addEventListener("click", ChatMenuItemClick, false); </script> </body> </html>
  • 13. http://www.slideshare.net/IgorShkulipa 13 Пример. Чат. Клиент. functions.js function Show(element) { element.setAttribute("style", "visibility:visible"); } function Hide(element) { element.setAttribute("style", "visibility:hidden"); } String.format = function () { // The string containing the format items (e.g. "{0}") // will and always has to be the first argument. var theString = arguments[0]; // start with the second argument (i = 1) for (var i = 1; i < arguments.length; i++) { // "gm" = RegEx options for Global search (more than one instance) // and for Multiline search var regEx = new RegExp("{" + (i - 1) + "}", "gm"); theString = theString.replace(regEx, arguments[i]); } return theString; }
  • 14. http://www.slideshare.net/IgorShkulipa 14 Пример. Чат. Клиент. chatclient.js ChatUI = { // Айдишники элементов интерфейса GlobalChatDivID: "", WelcomeHeaderID: "welcomeHeader", LoginDivID: "loginDiv", LoginTextBoxID: "usernameText", LoginButtonID: "connectButton", MainChatDivID: "mainChatDiv", InputMessageDivID: "inputMessageDiv", InputMessageTextBoxID: "inputMessageText", InputMessageButtonID: "inputMessageButton", MessagesDivID: "messagesDiv", MessagesListID: "messagesList", //Заголовки MainHeaderText: "Chat", ConnectButtonText: "Connect", SendButtonText: "Send", // Сообщения WelcomeMessageText: "Welcome, {0}!", InputNameMessageText: "You must input the name!", InputMessageMessageText: "You must input message!", ConnectedToChatMessageText: "Connected!", ErrorMessageText: "An Error Occured!",
  • 15. http://www.slideshare.net/IgorShkulipa 15 Пример. Чат. Клиент. chatclient.js // Пользовательский интерфейс GetWelcomeHeader: function () { return String.format("<h2 id="{0}">{1}</h2>", ChatUI.WelcomeHeaderID, ChatUI.MainHeaderText); }, GetLoginDiv: function () { return String.format("<div id="{0}" class="container">" + "<input type="text" id="{1}" />" + "<input type="button" id="{2}" value="{3}" /></div>", ChatUI.LoginDivID, ChatUI.LoginTextBoxID, ChatUI.LoginButtonID, ChatUI.ConnectButtonText); }, GetMainChatDiv: function () { return String.format("<div id="{0}"><div id="{1}" class="container">" + "<input type="text" id="{2}" />" + "<input type="button" id="{3}" value="{4}" /></div>" + "<div id="{5}" class="container">" + "<ul id="{6}"></ul></div></div>", ChatUI.MainChatDivID, ChatUI.InputMessageDivID, ChatUI.InputMessageTextBoxID, ChatUI.InputMessageButtonID, ChatUI.SendButtonText, ChatUI.MessagesDivID, ChatUI.MessagesListID); },
  • 16. http://www.slideshare.net/IgorShkulipa 16 Пример. Чат. Клиент. chatclient.js // Добавление сообщения в список AddMessageToUI: function (name, message) { $(ChatUI.MessagesListID).innerHTML += String.format("<li><strong>{0}</strong>: {1}</li>", name, message); }, // Обработчики кнопок LoginButtonClick: function () { ChatEngine.UserName = $(ChatUI.LoginTextBoxID).value; if (ChatEngine.UserName.length > 0) { Show($(ChatUI.MainChatDivID)); Hide($(ChatUI.LoginDivID)); $(ChatUI.WelcomeHeaderID).innerHTML = String.format(ChatUI.WelcomeMessageText, ChatEngine.UserName); ChatEngine.StartChat(); } else { alert(ChatUI.InputNameMessageText); } }, SendMessageButtonClick: function () { var message = $(ChatUI.InputMessageTextBoxID).value; if (message.length > 0) { ChatEngine.SendMessageToServer(message); $(ChatUI.InputMessageTextBoxID).value = ""; } else { alert(ChatUI.InputMessageMessageText); } },
  • 17. http://www.slideshare.net/IgorShkulipa 17 Пример. Чат. Клиент. chatclient.js ShowUI: function (divID) { ChatUI.GlobalChatDivID = divID; $(ChatUI.GlobalChatDivID).innerHTML = ChatUI.GetWelcomeHeader() + ChatUI.GetLoginDiv() + ChatUI.GetMainChatDiv(); Hide($(ChatUI.MainChatDivID)); Show($(ChatUI.LoginDivID)); }, BindEventHandlers: function () { $(ChatUI.LoginButtonID).addEventListener("click", ChatUI.LoginButtonClick, false); $(ChatUI.InputMessageButtonID).addEventListener("click", ChatUI.SendMessageButtonClick, false); } }
  • 18. http://www.slideshare.net/IgorShkulipa 18 Пример. Чат. Клиент. chatclient.js ChatMessage = { Divider: ":-:", User: "", Message: "", ToString: function () { return this.User + this.Divider + this.Message; }, FromSring: function (str) { this.User = str.substring(0, str.indexOf(this.Divider)); this.Message = str.substring(str.indexOf(this.Divider) + this.Divider.length); } };
  • 19. http://www.slideshare.net/IgorShkulipa 19 Пример. Чат. Клиент. chatclient.js ChatEngine = { ServerAddress: "", Connection: Object, UserName: "", StartChat: function () { window.WebSocket = window.WebSocket || window.MozWebSocket; ChatEngine.Connection = new WebSocket("ws://" + ChatEngine.ServerAddress); ChatEngine.Connection.onopen = function () { alert(ChatUI.ConnectedToChatMessageText); }; ChatEngine.Connection.onerror = function (error) { alert(ChatUI.ErrorMessageText); }; ChatEngine.Connection.onmessage = function (message) { ChatMessage.FromSring(message.data) ChatUI.AddMessageToUI(ChatMessage.User, ChatMessage.Message); }; }, SendMessageToServer: function (message) { ChatMessage.User = ChatEngine.UserName; ChatMessage.Message = message; ChatEngine.Connection.send(ChatMessage.ToString()); } };
  • 20. http://www.slideshare.net/IgorShkulipa 20 Пример. Чат. Клиент. chatclient.js function ChatMenuItemClick() { ChatUI.ShowUI("content"); ChatUI.BindEventHandlers(); ChatEngine.ServerAddress = "127.0.0.1:12345"; }
  • 25. http://www.slideshare.net/IgorShkulipa 25 Лабораторная работа №6. Добавить чат на персональную страницу