12 - Java. Разработка сетевых приложений на Java

20
Разработка сетевых приложений на Java Алексей Владыкин 1 декабря 2014 Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 1 / 20

Transcript of 12 - Java. Разработка сетевых приложений на Java

Page 1: 12 - Java. Разработка сетевых приложений на Java

Разработка сетевых приложений на Java

Алексей Владыкин

1 декабря 2014

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 1 / 20

Page 2: 12 - Java. Разработка сетевых приложений на Java

1 URL и URI

2 Сокеты

3 NIO

4 Netty

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 2 / 20

Page 3: 12 - Java. Разработка сетевых приложений на Java

URL и URI

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 3 / 20

Page 4: 12 - Java. Разработка сетевых приложений на Java

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

Page 5: 12 - Java. Разработка сетевых приложений на Java

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

Page 6: 12 - Java. Разработка сетевых приложений на Java

Сокеты

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 6 / 20

Page 7: 12 - Java. Разработка сетевых приложений на Java

Сокеты

Низкоуровневый API для пересылки байтов по сети

Поддерживаются протоколы TCP и UDP

Поддерживается адресация IPv4 (213.180.204.3)и IPv6 (2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d)

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 7 / 20

Page 8: 12 - Java. Разработка сетевых приложений на Java

Сокеты

java.net.DatagramSocket (клиент)

try (DatagramSocket s = new DatagramSocket ()) {DatagramPacket p = new DatagramPacket(

buf , buf.length , remoteAddress );s.send(p);

}

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 8 / 20

Page 9: 12 - Java. Разработка сетевых приложений на Java

Сокеты

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

Page 10: 12 - Java. Разработка сетевых приложений на Java

Сокеты

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

Page 11: 12 - Java. Разработка сетевых приложений на Java

Сокеты

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

Page 12: 12 - Java. Разработка сетевых приложений на Java

NIO

Что такое NIO?

Расширение java.io, добавлено в 1.4

Уровень абстракции ближе к ОСПоддерживается неблокирующий ввод-выводБолее высокая производительность

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 12 / 20

Page 13: 12 - Java. Разработка сетевых приложений на Java

NIO

Основные понятия NIO

BufferАналог массива, но может представлять области памяти ОС

ChannelАналог потока, поддерживает операции чтения/записи

SelectorСервис для отслеживания событий в каналах

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 13 / 20

Page 14: 12 - Java. Разработка сетевых приложений на Java

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

Page 15: 12 - Java. Разработка сетевых приложений на Java

Netty

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 15 / 20

Page 16: 12 - Java. Разработка сетевых приложений на Java

Netty

Удобная библиотека для разработки сетевых приложений

Инкапсулирует низкоуровневую работу с сетью и потоками

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 16 / 20

Page 17: 12 - Java. Разработка сетевых приложений на Java

Netty

Channel

io.netty.channel.Channel

Аналог java.net.Socket

Представляет конкретное подключение

Позволяет писать и читать данные (асинхронно)

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 17 / 20

Page 18: 12 - Java. Разработка сетевых приложений на Java

Netty

ChannelPipeline

io.netty.channel.ChannelPipeline

Цепочка обработчиков ChannelHandler, связанная с каналом

Inbound — направление из сети в программу,outbound — направление из программы в сеть

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 18 / 20

Page 19: 12 - Java. Разработка сетевых приложений на Java

Netty

События в канале

Inbound: messageReceived, exceptionCaught, channelOpen,channelClosed

Outbound: write, connect, disconnect, close

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 19 / 20

Page 20: 12 - Java. Разработка сетевых приложений на Java

Netty

ChannelFuture

io.netty.channel.ChannelFuture

Аналог java.util.concurrent.Future

Представляет результат асинхронной операции

Алексей Владыкин Разработка сетевых приложений 1 декабря 2014 20 / 20