12 - Java. Разработка сетевых приложений на Java
-
Upload
roman-brovko -
Category
Education
-
view
158 -
download
3
Transcript of 12 - Java. Разработка сетевых приложений на Java
Разработка сетевых приложений на Java
Алексей Владыкин
1 декабря 2014
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 1 / 20
1 URL и URI
2 Сокеты
3 NIO
4 Netty
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 2 / 20
URL и URI
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 3 / 20
URL и URI
java.net.URI
Uniform Resource Identifier, RFC 3986
Примеры:mailto:[email protected]:isbn:096139210xhttp://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28
Синтаксические операции:разбор на компонентыresolverelativize
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 4 / 20
URL и URI
java.net.URL
Uniform Resource Locator, RFC 1738
Примеры:http://java.sun.com/j2se/1.3/file:/home/av/projects/
Поддерживает операции доступа:openConnection(), openStream()
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 5 / 20
Сокеты
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 6 / 20
Сокеты
Низкоуровневый API для пересылки байтов по сети
Поддерживаются протоколы TCP и UDP
Поддерживается адресация IPv4 (213.180.204.3)и IPv6 (2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d)
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 7 / 20
Сокеты
java.net.DatagramSocket (клиент)
try (DatagramSocket s = new DatagramSocket ()) {DatagramPacket p = new DatagramPacket(
buf , buf.length , remoteAddress );s.send(p);
}
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 8 / 20
Сокеты
java.net.DatagramSocket (сервер)
try (DatagramSocket s = new DatagramSocket(port )){byte[] buf = new byte [1024];DatagramPacket p = new DatagramPacket(
buf , buf.length );s.receive(p);
}
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 9 / 20
Сокеты
java.net.Socket
Клиентский сокет, устанавливает TCP соединение с сервером
Socket socket = new Socket("localhost", 11111);
OutputStream os = socket.getOutputStream ();os.write(requestBytes );os.flush ();
InputStream is = socket.getInputStream ();is.read(responseBytes );
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 10 / 20
Сокеты
java.net.ServerSocket
Серверный сокет, ожидает подключений от клиентов
ServerSocket server = new ServerSocket (11111);Socket socket = server.accept ();
InputStream is = socket.getInputStream ();is.read(requestBytes );
OutputStream os = socket.getOutputStream ();os.write(responseBytes );os.flush ();
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 11 / 20
NIO
Что такое NIO?
Расширение java.io, добавлено в 1.4
Уровень абстракции ближе к ОСПоддерживается неблокирующий ввод-выводБолее высокая производительность
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 12 / 20
NIO
Основные понятия NIO
BufferАналог массива, но может представлять области памяти ОС
ChannelАналог потока, поддерживает операции чтения/записи
SelectorСервис для отслеживания событий в каналах
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 13 / 20
NIO
Пример NIO
try (FileChannel src =new FileInputStream(in). getChannel ();
FileChannel dst =new FileOutputStream(out). getChannel ()) {
src.transferTo (0, src.size(), dst);}
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 14 / 20
Netty
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 15 / 20
Netty
Удобная библиотека для разработки сетевых приложений
Инкапсулирует низкоуровневую работу с сетью и потоками
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 16 / 20
Netty
Channel
io.netty.channel.Channel
Аналог java.net.Socket
Представляет конкретное подключение
Позволяет писать и читать данные (асинхронно)
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 17 / 20
Netty
ChannelPipeline
io.netty.channel.ChannelPipeline
Цепочка обработчиков ChannelHandler, связанная с каналом
Inbound — направление из сети в программу,outbound — направление из программы в сеть
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 18 / 20
Netty
События в канале
Inbound: messageReceived, exceptionCaught, channelOpen,channelClosed
Outbound: write, connect, disconnect, close
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 19 / 20
Netty
ChannelFuture
io.netty.channel.ChannelFuture
Аналог java.util.concurrent.Future
Представляет результат асинхронной операции
Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 20 / 20