SORU
23 Kasım 2011, ÇARŞAMBA


Bu HsOpenSSL uygun kullanımı TLS Sunucusu uygulamak için API

Düzgün eşzamanlı bir bağlamda OpenSSL.Session API kullanmak için nasıl anlamaya çalışıyorum

E. g. a stunnel-style ssl-wrapper saf full-duplex tcp-port-forwarder: uygulayan aşağıdaki temel iskelet yapısı, olmasını beklerdim uygulamak istiyorum varsayalım

runProxy :: PortID -> AddrInfo -> IO ()
runProxy localPort@(PortNumber lpn) serverAddrInfo = do
  listener <- listenOn localPort

  forever $ do
    (sClient, clientAddr) <- accept listener

    let finalize sServer = do
            sClose sServer
            sClose sClient

    forkIO $ do
        tidToServer <- myThreadId
        bracket (connectToServer serverAddrInfo) finalize $ \sServer -> do
            -- execute one 'copySocket' thread for each data direction
            -- and make sure that if one direction dies, the other gets
            -- pulled down as well
            bracket (forkIO (copySocket sServer sClient
                             `finally` killThread tidToServer))
                    (killThread) $ \_ -> do
                copySocket sClient sServer -- "controlling" thread

 where
  -- |Copy data from source to dest until EOF occurs on source
  -- Copying may also be aborted due to exceptions
  copySocket :: Socket -> Socket -> IO ()
  copySocket src dst = go
   where
    go = do
        buf <- B.recv src 4096
        unless (B.null buf) $ do
            B.sendAll dst buf
            go

  -- |Create connection to given AddrInfo target and return socket
  connectToServer saddr = do
    sServer <- socket (addrFamily saddr) Stream defaultProtocol
    connect sServer (addrAddress saddr)
    return sServer

Nasıl full-duplex ssl-wrapping tcp-forwarding proxy yukarıdaki iskelet dönüşüm? Nerede tehlikeleri eşzamanlı/W. R. T paralel yürütme (yukarıda bağlamında kullanımı-örnek) işlev çağrıları HsOpenSSL tarafından sağlanan API?

PS: hala kod sağlam yapmak için nasıl anlamak zorlanıyorum w.r.t. özel durumlar ve kaynak sızıntıları için. Eğer kodda kötü bir şey yukarıda dikkat ederseniz bu soru ana konusu olmamakla olsada, bir yorum bırakın lütfen.

CEVAP
11 EYLÜL 2012, Salı


Doğru yoldasın bence. (Ve evet, öğreticiler aşırı basitleştirilmiş).

Tablet bir düzen içinde, tek bir Etkinlik kullanmak ve takas edebilirsin Parçaları (birden çok 'bölmeleri'). Telefon düzeni ise her Parça için yeni bir Aktivite kullanabilirsiniz.

Bunun gibi

enter image description here

Ekstra bir sürü iş gibi görünebilir, ama telefon için birden fazla faaliyetleri kullanarak, yaşam döngüsü ve Niyet geçirmeden temel Aktivite sağlar. Bu da çerçeve tüm animasyonları işlemek için izin verir ve geri yığını.

Kod azaltmak için BaseActivity kullanın ve uzatabilirsiniz.

Eğer kullanıcı bir tablet varsa MyMultiPaneFragActivity ya da benzer bir şey kullanmak istiyorsunuz. Bu etkinlik doğru parçası (arama niyet gibi) parçaları ve yönlendirme niyet yönetimine geri sorumludur

Eğer kullanıcı bir telefon varsa, çok az kod ile düzenli kullanım ve MyBaseSingleFragActivity veya benzeri uzatmak olabilir. Bu faaliyetler çok basit, 5-10 satır kod (hatta belki daha az) olabilir.

Zor kısmı niyet falan yönlendirme. (Edit: daha fazla aşağıya bakınız)*.

Bu tavsiye nedeni bellekten tasarruf ve karmaşıklığı ve kaplin azaltmak için olduğunu düşünüyorum. Eğer Parçaları takas iseniz, FragmentManager Bu Parça için bir referans tutar geri yığını. Ayrıca olmalıdır 'çalışan' kullanıcı için. ne kolaylaştırır Bu Kur da etkinlikten Parçası yaşam döngüsü görünüm ve düzen ve mantık decouples. Bu şekilde bir Parça üç bölmesi Aktivite, vb bir başka parça (iki bölmeli) yanında tek bir aktivite, ya da bulunabilir.

Bir Faaliyet açıkça her yerden başlatabilirsiniz bu yönlendirme düzenli niyet sahip olmanın avantajlarından biri *geri-yığını. Bir örnek arama sonuçları durumda olabilir. (MySearchResults.class).

Daha fazlası için bir okuma var burada:

http://android-developers.blogspot.com/2011/09/preparing-for-handsets.html

Her parçası ayrı faaliyetleri üzerinde çalışmak gerekir, çünkü daha küçük bir ön çalışma olabilir, ama genellikle kapalı öder. Farklı parça kombinasyonları tanımlamak, parça kod modüler tutmak, eylem bar yönetimi basitleştirmek ve sistem halletsin tüm yığın geri çalışan alternatif düzeni dosyaları kullanabileceğiniz anlamına gelir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • ecf150king

    ecf150king

    20 Ocak 2006
  • Submissions101

    Submissions1

    23 ŞUBAT 2007