Podstawowe informacje o pracy w sieci i komunikacji
Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje
Podczas tworzenia aplikacji w programach Flash Player lub AIR często wymagane jest uzyskanie dostępu do zasobów spoza aplikacji. Na przykład, wymagane może być wysłanie żądania obrazu na serwer sieci WWW i uzyskanie zwróconych danych obrazu. Możliwe może też być wysłanie serializowanych obiektów i odebranie ich z powrotem poprzez połączenie przez gniazdo z serwerem aplikacji. Interfejsy API programu Flash Player i AIR udostępniają kilka klas umożliwiających aplikacjom uczestnictwo w takiej wymianie. Te interfejsy API obsługują pracę w sieci opartą na adresie IP dla protokołów takich, jak UDC, TCP, HTTP, RTMP i RTMFP.
Poniższe klasy można wykorzystać w celu wysłania i pobrania danych przez sieć:
Klasa
|
Obsługiwane formaty danych
|
Protokoły
|
Opis
|
Loader
|
SWF, PNG, JPEG, GIF
|
HTTP, HTTPS
|
Służy do wczytywania obsługiwanych typów danych i przekształcania danych w obiekt ekranowy.
Patrz część
Dynamiczne ładowanie treści wyświetlanych
.
|
URLLoader
|
Dowolne (tekstowe, XML, binarne itd.)
|
HTTP, HTTPS
|
Służy do ładowania dowolnych formatów danych. To aplikacja odpowiada za interpretację danych.
Patrz część
Korzystanie z klasy URLLoader
.
|
FileReference
|
Dowolne
|
HTTP
|
Służy do wczytywania i pobierania plików.
Patrz część
Korzystanie z klasy FileReference
.
|
NetConnection
|
Wideo, audio, ActionScript Message Format (AMF)
|
HTTP, HTTPS, RTMP, RTMFP
|
Służy do łączenia ze strumieniami wideo, audio i obiektów zdalnych.
Patrz część
Praca z wideo
.
|
Dźwięk
|
Dźwięk
|
HTTP
|
Służy do wczytywania i odtwarzania obsługiwanych formatów audio.
Patrz część
Ładowanie zewnętrznych plików dźwiękowych
.
|
XMLSocket
|
XML
|
TCP
|
Służy do wymiany komunikatów XML z serwerem XMLSocket.
Patrz część
Gniazda XML
.
|
Socket
|
Dowolne
|
TCP
|
Służy do łączenia z serwerem gniazd TCP.
Patrz część
Gniazda binarne na kliencie
.
|
SecureSocket
(AIR)
|
Dowolne
|
TOC z SSLv3 lub TLSv1
|
Służy do łączenia z serwerem gniazd TCP, który wymaga zabezpieczeń SSL lub TLS.
Patrz część
Bezpieczne gniazda klienckie (AIR)
.
|
ServerSocket
(AIR)
|
Dowolne
|
TCP
|
Służy jako serwer dla połączeń przychodzących do gniazda TCP.
Patrz rozdział
Gniazda serwerowe
.
|
DatagramSocket
(AIR)
|
Dowolne
|
UDP
|
Służy do wysyłania i odbierania pakietów UDP.
Patrz część
Gniazda UDP (AIR)
.
|
Często podczas tworzenia aplikacji sieci WWW przydatne jest zapisywanie trwałych informacji o stanie aplikacji użytkownika. Strony i aplikacje HTML zazwyczaj wykorzystują do tego celu pliki cookie. W programie Flash Player w tym samym celu można użyć klasy SharedObject. Patrz część
Obiekty udostępnione
. (Klasa SharedObject może być wykorzystywana w aplikacjach AIR, ale zdecydowanie mniej ograniczeń będzie obowiązywać, jeśli dane zostaną po prostu zapisane do zwykłego pliku.)
Gdy w aplikacji środowiska Flash Player lub AIR wymagana jest komunikacja z inną aplikacją środowiska Flash Player lub AIR na tym samym komputerze, można zastosować klasę LocalConnection. Na przykład, dwa (lub więcej) pliki SWF na tej samej stronie WWW mogą komunikować się ze sobą. Podobnie, plik SWF działający na stronie WWW może komunikować się z aplikacją środowiska AIR. Patrz część
Komunikacja z innymi instancjami programu Flash Player lub programu AIR
.
Gdy wymagana jest komunikacją z innym, różnym od SWF procesem na lokalnym komputerze, można zastosować klasę NativeProcess, która została dodana w programie AIR 2. Klasa NativeProcess umożliwia aplikacji środowiska AIR uruchomienie innych aplikacji i komunikację z nimi. Patrz część
Komunikacja z procesami rodzimymi w środowisku AIR
.
Gdy wymagane są informacje na temat środowiska sieciowego komputera, na którym uruchomiona jest aplikacja AIR, można skorzystać z następujących klas:
Ważne pojęcia i terminy
Na poniższej liście wyjaśniono znaczenie ważnych terminów stosowanych w kontekście programowania obsługi sieci i komunikacji.
-
Dane zewnętrzne
-
Dane zapisane na zewnątrz aplikacji i ładowane do aplikacji w razie potrzeby. Te dane mogą być zapisane w pliku ładowanym bezpośrednio lub zapisanym w bazie danych albo w innej postaci pobieranej poprzez wywoływanie skryptów lub programów działających na serwerze.
-
Zmienne zakodowane zgodnie z URL
-
Format kodowania URL stanowi sposób reprezentacji kilku zmiennych (pary nazw zmiennych i wartości) w pojedynczym fragmencie tekstu. Pojedyncze zmienne są zapisane w formacie name=value. Zmienne (tj. pary nazwa-wartość) są rozdzielone znakami ampersandu, np.: variable1=value1&variable2=value2. Dzięki temu w postaci jednego komunikatu można wysłać nieskończoną liczbę zmiennych.
-
Typ MIME
-
Standardowy kod służący do identyfikowania typu określonego pliku w komunikacji internetowej. Każdy typ pliku ma określony kod służący do identyfikowania pliku. Podczas wysyłania pliku lub komunikatu komputer (np. serwer sieci Web lub instancja programu Flash Player albo środowiska AIR) określa typ wysyłanego pliku.
-
HTTP
-
Protokół Hypertext Transfer Protocol — standardowy format dostarczania stron sieci Web i różnych innych typów treści, które są przesyłane w Internecie.
-
Metoda żądania
-
Gdy aplikacja (taka jak aplikacja środowiska AIR lub przeglądarka internetowa) wysyła komunikat (nazywany żądaniem HTTP) do serwera sieci Web, wówczas wysyłane dane mogą zostać osadzone w żądaniu na dwa sposoby; te dwa sposoby to metody żądań: GET i POST. Po stronie serwera program odbierający żądanie będzie musiał znaleźć dane w odpowiedniej części żądania, dlatego metoda żądania używana do wysyłania danych z aplikacji użytkownika musi być zgodna z metodą żądania używaną do odczytywania danych na serwerze.
-
Połączenie przez gniazdo
-
Stałe połączenie umożliwiające komunikację między dwoma komputerami.
-
Wysyłanie
-
Wysyłanie pliku do innego komputera.
-
Pobieranie
-
Uzyskiwanie pliku z innego komputera.
Interfejsy sieciowe
Obiektu NetworkInfo można używać do wykrywania sprzętowych i programowych interfejsów sieciowych dostępnych dla aplikacji. NetworkInfo jest obiektem typu
singleton
; nie trzeba go jawnie tworzyć. Dostęp do jedynego istniejącego obiektu NetworkInfo uzyskuje się za pośrednictwem statycznej właściwości klasy,
networkInfo
. Obiekt NetworkInfo wywołuje również zdarzenie
networkChange
, gdy zajdzie zmiana w jednym z dostępnych interfejsów.
Aby uzyskać listę obiektów NetworkInterface, należy wywołać metodę
findInterfaces()
. Każdy obiekt NetworkInterface na liście opisuje jeden z dostępnych interfejsów. Obiekt NetworkInterface zawiera takie informacje, jak adres IP, adres sprzętowy, rozmiar maksymalnej jednostki transmisji (MTU) i status aktywności interfejsu.
Poniższy przykładowy kod wyświetla właściwości NetworkInterface każdego z interfejsów komputera klienckiego:
package {
import flash.display.Sprite;
import flash.net.InterfaceAddress;
import flash.net.NetworkInfo;
import flash.net.NetworkInterface;
public class NetworkInformationExample extends Sprite
{
public function NetworkInformationExample()
{
var networkInfo:NetworkInfo = NetworkInfo.networkInfo;
var interfaces:Vector.<NetworkInterface> = networkInfo.findInterfaces();
if( interfaces != null )
{
trace( "Interface count: " + interfaces.length );
for each ( var interfaceObj:NetworkInterface in interfaces )
{
trace( "\nname: " + interfaceObj.name );
trace( "display name: " + interfaceObj.displayName );
trace( "mtu: " + interfaceObj.mtu );
trace( "active?: " + interfaceObj.active );
trace( "parent interface: " + interfaceObj.parent );
trace( "hardware address: " + interfaceObj.hardwareAddress );
if( interfaceObj.subInterfaces != null )
{
trace( "# subinterfaces: " + interfaceObj.subInterfaces.length );
}
trace("# addresses: " + interfaceObj.addresses.length );
for each ( var address:InterfaceAddress in interfaceObj.addresses )
{
trace( " type: " + address.ipVersion );
trace( " address: " + address.address );
trace( " broadcast: " + address.broadcast );
trace( " prefix length: " + address.prefixLength );
}
}
}
}
}
}
Więcej informacji:
Zmiany stanu połączeń sieciowych
Aplikacja AIR może działać w środowiskach, w których stan połączeń sieciowych będzie zmienny lub niestabilny. Aby ułatwić zarządzanie połączeniami z zasobami sieciowymi w ramach aplikacji, środowisko AIR wysyła zdarzenie zmiany stanu sieci za każdym razem, gdy połączenie sieciowe stanie się dostępne lub niedostępne. Zarówno obiekt NetworkInfo, jak i obiekt NativeApplication aplikacji wywołują zdarzenie
networkChange
. Aby zareagować na to zdarzenie, należy dodać detektor:
NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange);
Oraz zdefiniować funkcję obsługi zdarzenia:
function onNetworkChange(event:Event)
{
//Check resource availability
}
Zdarzenie
networkChange
nie oznacza każdej zmiany w aktywności sieci, a jedynie zmianę stanu jednego z połączeń sieciowych. Środowisko AIR nie próbuje interpretować znaczenia zmiany stanu połączenia sieciowego. Komputer pracujący w sieci może mieć wiele połączeń rzeczywistych i wirtualnych, a zatem utrata połączenia nie musi być równoznaczna z utratą dostępu do zasobu. Z drugiej strony, nowe połączenia nie gwarantują lepszej dostępności zasobu. Niekiedy nowe połączenie może nawet zablokować dostęp do zasobów, które były wcześniej dostępne (na przykład w wypadku połączenia z siecią VPN).
Co do zasady, jedynym sposobem sprawdzenia, czy aplikacja może połączyć się z zasobem zdalnym, jest podjęcie próby takiego połączenia. Architektura monitorowania usług udostępnia oparty na zdarzeniach mechanizm reagowania na zmiany stanu połączeń sieciowych z konkretnym hostem.
Uwaga:
Architektura monitorowania usług wykrywa, czy serwer w sposób akceptowalny reaguje na żądanie. Pozytywny wynik sprawdzenia nie gwarantuje pełnej łączności. Skalowalne usługi Web Service często korzystają z mechanizmów buforowania i równoważenia ruchu, które przekierowują ruch do klastra serwerów sieci Web. W takiej sytuacji dostawcy usług zapewniają tylko częściową diagnostykę łączności sieciowej.
Monitorowanie usług
Architektura monitorowania usług, odrębna od architektury AIR, rezyduje w pliku aircore.swc. Aby skorzystać z tej architektury, należy uwzględnić plik aircore.swc w procesie budowania.
Program Adobe® Flash® Builder uwzględnia tę bibliotekę automatycznie.
Klasa ServiceMonitor implementuje architekturę monitorowania usług sieciowych i udostępnia podstawową funkcjonalność dla monitorów usług. Domyślnie instancja klasy ServiceMonitor wywołuje zdarzenia dotyczące połączeń sieciowych. Obiekt ServiceMonitor wywołuje te zdarzenia przy tworzeniu instancji i za każdym razem, gdy środowisko wykonawcze wykryje zmianę stanu sieci. Ponadto możliwe jest ustawienie właściwości
pollInterval
instancji klasy ServiceMonitor w taki sposób, aby stan połączeń był sprawdzany co zadaną liczbę milisekund, niezależnie od zdarzeń zmiany stanu połączeń sieciowych. Obiekt ServiceMonitor nie sprawdza połączeń sieciowych, zanim nie zostanie wywołana metoda
start()
.
Klasa URLMonitor, będąca podklasą klasy ServiceMonitor, wykrywa zmiany w połączeniach HTTP dla określonego obiektu URLRequest.
Klasa SocketMonitor, która również jest podklasą klasy ServiceMonitor, wykrywa zmiany w łączności z określonym hostem na określonym porcie.
Uwaga:
W wersjach środowiska AIR wcześniejszych niż 2 struktura monitora usług była publikowana w bibliotece servicemonitor.swc. Ta biblioteka ma obecnie status przestarzałej. Należy zamiast niej używać biblioteki aircore.swc.
Flash CS4 i CS5 Professional
Aby skorzystać z tych klas w programie Adobe® Flash® CS4 lub CS5 Professional:
-
Wybierz polecenie Plik > Ustawienia publikowania.
-
Kliknij przycisk Ustawienia dla ActionScript 3.0. Wybierz ścieżkę biblioteki.
-
Kliknij przycisk Przeglądaj w poszukiwaniu SWC i przejdź do folderu AIK w folderze instalacyjnym programu Flash Professional.
-
W folderze tym znajdź plik /frameworks/libs/air/aircore.swc (w środowisku AIR 2) lub /frameworks/libs/air/servicemonitor.swc (w środowisku AIR 1.5).
-
Kliknij przycisk OK.
-
Dodaj poniższą instrukcję importowania do kodu w języku ActionScript 3.0:
import air.net.*;
Flash CS3 Professional
Aby użyć klas w programie Adobe® Flash® CS3 Professional, należy przeciągnąć składnik ServiceMonitorShim z panelu Składniki do Biblioteki. Następnie należy dodać poniższą instrukcję
import
do kodu w języku ActionScript 3.0:
import air.net.*;
Monitorowanie połączeń HTTP
Klasa URLMonitor określa, czy możliwe jest wysyłanie żądań HTTP do określonego adresu na port 80 (typowy port używany w komunikacji HTTP). W poniższym kodzie użyto instancji klasy URLMonitor w celu wykrywania zmian w łączności z witryną firmy Adobe:
import air.net.URLMonitor;
import flash.net.URLRequest;
import flash.events.StatusEvent;
var monitor:URLMonitor;
monitor = new URLMonitor(new URLRequest('http://www.example.com'));
monitor.addEventListener(StatusEvent.STATUS, announceStatus);
monitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + monitor.available);
}
Monitorowanie gniazd
Aplikacje AIR mogą także używać połączeń z gniazdami do realizacji łączności w modelu aktywnym (ang. push). Zapory i routery sieciowe zazwyczaj ze względów bezpieczeństwa uniemożliwiają komunikację sieciową przez nieupoważnione porty. Dlatego programiści muszą brać pod uwagę fakt, że użytkownik nie zawsze może nawiązać połączenie przez gniazdo.
W poniższym kodzie użyto instancji klasy SocketMonitor w celu wykrywania zmian w połączeniu z gniazdem. Monitorowany jest port 6667 — używany zwykle dla protokołu IRC.
import air.net.ServiceMonitor;
import flash.events.StatusEvent;
socketMonitor = new SocketMonitor('www.example.com',6667);
socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange);
socketMonitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + socketMonitor.available);
}
Jeżeli serwer gniazda wymaga bezpiecznego połączenia, można użyć klasy SecureSocketMonitor zamiast klasy SocketMonitor.
Rekordy usługi DNS (Domain Name System)
Klasa DNSResolver umożliwia wyszukiwanie rekordów zasobów DNS. Rekordy DNS zawierają takie informacje, jak adres IP przypisany do nazwy domeny oraz nazwa domeny przypisana do adresu IP. Istnieje możliwość wyszukiwania następujących typów rekordów zasobów DNS:
-
ARecord — adres IPv4 hosta.
-
AAAARecord — adres IPv6 hosta.
-
MXRecord — rekord usługi wymiany poczty dla hosta.
-
PTRRecord — nazwa hosta przypisana do danego adresu IP.
-
SRVRecord — rekord usługi..
Aby wyszukać rekord, należy przekazać ciąg znaków zapytania i obiekt klasy reprezentujący typ rekordu do metody
lookup()
obiektu DNSResolver. Ciąg znaków zapytania powinien odpowiadać typowy rekord:
Klasa rekordu
|
Ciąg znaków zapytania
|
Przykładowy ciąg znaków zapytania
|
ARecord
|
nazwa hosta
|
"example.com"
|
AAAARecord
|
nazwa hosta
|
"example.com"
|
MXRecord
|
nazwa hosta
|
"example.com"
|
PTRRecord
|
adres IP
|
"208.77.188.166"
|
SRVRecord
|
Identyfikator usługi: _service._protocol.host
|
"_sip._tcp.example.com"
|
Poniższy przykładowy kod wyszukuje adres IP hosta "example.com".
package
{
import flash.display.Sprite;
import flash.events.DNSResolverEvent;
import flash.events.ErrorEvent;
import flash.net.dns.ARecord;
import flash.net.dns.DNSResolver;
public class DNSResolverExample extends Sprite
{
public function DNSResolverExample()
{
var resolver:DNSResolver = new DNSResolver();
resolver.addEventListener( DNSResolverEvent.LOOKUP, lookupComplete );
resolver.addEventListener( ErrorEvent.ERROR, lookupError );
resolver.lookup( "example.com.", ARecord );
}
private function lookupComplete( event:DNSResolverEvent ):void
{
trace( "Query string: " + event.host );
trace( "Record count: " + event.resourceRecords.length );
for each( var record:* in event.resourceRecords )
{
if( record is ARecord ) trace( record.address );
}
}
private function lookupError( error:ErrorEvent ):void
{
trace("Error: " + error.text );
}
}
}
Aby znaleźć więcej informacji na ten temat, zobacz:
|
|
|
|
|