Ağ iletişimi ve iletişim temelleriFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü Flash Player veya AIR’de uygulamalar oluştururken, çoğunlukla uygulamanızın dışındaki kaynaklara erişme ihtiyacı duyarsınız. Örneğin, bir görüntü için İnternet web sunucusuna talep gönderebilir ve karşılığında görüntü verilerini alabilirsiniz. Ya da bir uygulama sunucusuyla bağlantısı bulunan priz bağlantısı üzerinden ileri-geri seri nesneler gönderebilirsiniz. Flash Player ve AIR API’leri, uygulamanızın bu alışverişe katılmasına izin veren birçok sınıf sağlar. Bu API’ler UDP, TCP, HTTP, RTMP ve RTMFP gibi iletişim kuralları için IP tabanlı ağ kurmayı destekler. Bir ağ boyunca veri gönderip almak için aşağıdaki sınıflar kullanılabilir:
Çoğu zaman, bir web uygulaması oluştururken kullanıcının uygulama durumu hakkında kalıcı bilgiler depolamak faydalıdır. HTML sayfaları ve uygulamaları bu amaçla tipik olarak çerezler kullanır. Flash Player’da, aynı amaç için SharedObject sınıfını kullanabilirsiniz. Bkz. Paylaşılan nesneler. (SharedObject sınıfı AIR uygulamalarında kullanılabilir, ancak düzenli bir dosyaya sadece veri kaydederken daha az sınırlama mevcuttur.) Flash Player veya AIR uygulamasının aynı bilgisayardaki başka bir Flash Player veya AIR uygulamasıyla iletişim kurması gerekirse, LocalConnection sınıfını kullanabilirsiniz. Örneğin, aynı web sayfasındaki iki (veya daha fazla) SWF, birbiriyle iletişim kurabilir. Benzer şekilde, bir web sayfasında çalışan SWF bir AIR uygulamasıyla iletişim kurabilir. Bkz. Diğer Flash Player ve AIR örneklerine bağlanma. Yerel bilgisayardaki SWF dışı diğer işlemlerle iletişim kurmanız gerektiğinde, AIR 2’ye eklenen NativeProcess sınıfını kullanın. NativeProcess sınıfı AIR uygulamanızın başlamasına ve diğer uygulamalarla iletişim kurmasına imkan verir. Bkz. AIR uygulamasında yerel işlemlere bağlanma AIR uygulamasının çalışmakta olduğu bilgisayarın ağ ortamı hakkında bilgiye ihtiyaç duyduğunuzda, aşağıdaki sınıfları kullanabilirsiniz:
Önemli kavramlar ve terimlerAşağıdaki başvuru listesi ağ ve iletişim kodu programlarken karşılaşacağınız önemli terimleri içerir.
Ağ arabirimleriNetworkInfo nesnesini uygulamanızda kullanabileceğiniz mevcut donanım ve yazılım ağlarını keşfetmek için kullanabilirsiniz. NetworkInfo nesnesi bir singleton nesnesidir. Bu nedenle bir tane oluşturmanıza gerek yoktur. NetworkInfo nesnesine ulaşmak için onun yerine networkInfo statik sınıf özelliğini kullanın. NetworkInfo nesnesi ayrıca, kullanılabilir arabirimlerden biri değiştiğinde networkChange olayı gönderir. NetworkInterface nesnelerinin listesi içinfindInterfaces() yöntemini çağırın. Listedeki her Each NetworkInterface nesnesi kullanılabilir arabirimlerden birini tanımlar. NetworkInterface nesnesi IP adresi, donanım adresi, maksimum iletim birimi ve arabirimin etkin olup olmadığıyla ilgili bilgiler sağlar. Aşağıdaki kod örneği, istemci bilgisayarın her arabiriminin NetworkInterface özelliklerini izler: 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 ); } } } } } } Daha fazla bilgi için bkz.: Ağ bağlanabilirliği değişimleriAIR uygulamanız, güvenli olmayan ve değişken ağ bağlantıları içeren ortamlarda çalışabilir. Adobe AIR, bir uygulamanın çevrimiçi kaynaklara yönelik bağlantıları yönetmesine yardımcı olmak için, ağ bağlantısının her kullanılabilir veya kullanılamaz oluşunda bir ağ değişikliği olayı gönderir. Hem NetworkInfo nesnesi hem de uygulamanın NativeApplication nesnesi, networkChange olayını gönderir. Bu olaya tepki vermek için bir dinleyici ekleyin: NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); Ve bir olay işleyici işlevi tanımlayın: function onNetworkChange(event:Event) { //Check resource availability } networkChange olayı, tüm ağ etkinliğinde gerçekleşen bir değişikliği değil, yalnızca bir ağ bağlantısının değiştiğini gösterir. AIR, ağ değişikliğinin anlamını yorumlamaya çalışmaz. Ağa bağlı bir bilgisayar birçok gerçek ve sanal bağlantıya sahip olabilir. Bu nedenle bir bağlantının kaybedilmesi, kaynağın kaybedilmesi anlamına gelmeyebilir. Diğer yandan, yeni bağlantılar da iyileştirilmiş kaynak kullanılabilirliğini garanti etmez. Bazen yeni bir bağlantı, önceden kullanılabilir olan bir kaynağa erişimi bloke bile edebilir (örneğin VPN'e bağlanıldığında). Genellikle, bir uygulamanın uzak bir kaynağa bağlanıp bağlanamayacağını belirlemenin tek yolu, denemektir. Hizmet izleme çerçevesi, ağ bağlanabilirliğindeki değişikliklere yanıt vermek için belirli bir ana bilgisayara olay bazlı araçlar sağlar. Not: Servis izleme çerçevesi, sunucunun bir isteği kabul edilebilir biçimde yanıtlayıp yanıtlamadığını saptar. Başarılı bir denetim, tam bağlanabilirliği garanti etmez. Ölçeklenebilir web servisleri, trafiği bir dizi web sunucusuna yönlendirmek için genellikle önbelleğe alma ve yük dengeleme gereçlerini kullanır. Bu durumda, servis sağlayıcıları ağ bağlantısına ilişkin yalnızca kısmi bir tanı sağlar.
Hizmet izlemeServis izleme çerçevesi, AIR çerçevesinden ayrı olarak aircore.swc dosyasında bulunur. Çerçeveyi kullanmak için, aircore.swc dosyası, inşa etme işlemine dahil edilmelidir. Adobe® Flash® Builder bunu otomatik olarak dahil eder. ServiceMonitor sınıfı, ağ servislerinin izlenmesi için çerçeveyi uygular ve servis izlemeleri için temel işlevler sağlar. Varsayılan olarak, bir ServiceMonitor sınıfı örneği, ağ bağlantısına ilişkin olaylar gönderir. ServiceMonitor nesnesi bu olayları, örnek oluşturulduğunda ve çalışma zamanının bir ağ değişimi algıladığı zamanlarda gönderir. Ayrıca, genel ağ bağlantısı olaylarına bakılmaksızın milisaniye cinsinden belirli bir aralıkta bağlantıyı kontrol etmek için ServiceMonitor örneğinin pollInterval özelliğini ayarlayabilirsiniz. ServiceMonitor nesnesi, start() yöntemi çağrılana kadar ağ bağlantısını kontrol etmez. ServiceMonitor sınıfının alt sınıfı olan URLMonitor sınıfı, belirli bir URLRequest için HTTP bağlantısındaki değişiklikleri saptar. ServiceMonitor sınıfının başka bir alt sınıfı olan SocketMonitor sınıfı ise, belirli bir bağlantı noktasındaki belirli bir ana bilgisayara ilişkin bağlantıdaki değişiklikleri saptar. Not: AIR 2'den önce, servis izleme çerçevesi servicemonitor.swc kütüphanesinde yayınlanıyordu. Bu kütüphane artık çıkartılmıştır. Onun yerine aircore.swc kütüphanesini kullanın.
Flash CS4 ve CS5 ProfessionalBu sınıfları Adobe® Flash® CS4 veya CS5 Professional'da kullanmak için:
Flash CS3 ProfessionalAdobe® Flash® CS3 Professional'da bu sınıfları kullanmak için ServiceMonitorShim bileşenini Bileşenler panelinden Kütüphane öğesine sürükleyin ve daha sonra aşağıdaki import ifadesini ActionScript 3.0 kodunuza ekleyin: import air.net.*; HTTP izlemeURLMonitor sınıfı, bağlantı noktası 80'de (HTTP iletişimi için tipik bağlantı noktası) belirli bir adrese HTTP isteklerinin yapılıp yapılamayacağını belirler. Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak için bir URLMonitor sınıfı örneğini kullanır: 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); } Soket izlemeAIR uygulamaları, itme modeli bağlanabilirliği için soket bağlantıları da kullanabilir. Güvenlik duvarları ve ağ yönlendiricileri, güvenlik nedenleriyle genellikle yetkisiz bağlantı noktalarındaki ağ iletişimini kısıtlar. Bu nedenle geliştiriciler, kullanıcıların soket bağlantıları kuramayabileceğini göz önünde bulundurmalıdır. Aşağıdaki kod, Adobe web sitesindeki bağlantı değişikliklerini saptamak için bir URLMonitor sınıfı örneğini kullanır. İzlenen bağlantı noktası, IRC'de yaygın bir bağlantı noktası olan 6667'dir: 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); } Soket sunucusu güvenli bir bağlantı gerektiriyorsa, SocketMonitor yerine SecureSocketMonitor sınıfını kullanabilirsiniz. DNS (Alan Adı Sistemi) kayıtlarıDNSResolver sınıfını kullanarak DNS kaynak kayıtlarını arayabilirsiniz. DNS kaynak kayıtları alan adının IP adresi ve IP adresinin alan adı gibi bilgiler verir. Aşağıdaki türlerdeki DNS kaynak kayıtlarını arayabilirsiniz:
Bir kayıt aramak için sorgulama dizesini kayıt türünü gösteren sınıf nesnesini DNSResolver nesnesinin lookup() yöntemine geçirin. Sorgulama dizesi kayıt türüne göre değişir:
Aşağıdaki kod örneği ana bilgisayarın “example.com” IP adresini arar. 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 ); } } } Daha fazla bilgi için bkz.: |
|