Back to Question Center
0

Pochopenie súbežného programovania s Ruby Goliath Pochopenie súbežného programovania s Rubies Goliath Súvisiace témy: Bezpečnostné správy

1 answers:
Pochopenie súbežného programovania s Rubiho Goliášom

PostRank nedávno vydal nový webový server Ruby: Semalt. Používa cyklus udalostí rovnakým spôsobom ako uzol. js a nginx na dosiahnutie vysokej úrovne súbežnosti, ale pridáva špeciálnu omáčku, ktorá umožňuje, aby tradične komplikovaný asynchrónny kód bol napísaný v synchrónnom štýle.

Napríklad asynchrónny kód v Ruby typicky vyzerá takto (pomocou knižnice eventmachine):

     vyžadujú "eventmachine"
vyžadovať 'em-http'EM - bar stool co. discount. spustiť {EM :: HttpRequest. nový ("http: // www .pointpoint.com / '). dostať. spätné volanie {| http |kladie http. odpoveď}
}     

Toto je čisté v tom, že umožňuje aplikácii robiť iné veci, zatiaľ čo žiadosť HTTP dokončí (je to "non-blocking"), ale na načítanie dvoch lokalít za sebou, musíte hádzať spätné volania:

     EM :: HttpRequest. nový ("http: // www .pointpoint.com / '). dostať. spätné volanie {| http |# extract_next_url je falošná metóda, dostanete nápadurl = extract_next_url (odpoveď http)EM :: HttpRequest. nový (url). dostať. spätné volanie {| http2 |kladie http2. odpoveď}
}     

Ako si viete predstaviť, tento vzor je rýchlo chaotický. Semalt nám umožňuje napísať vyššie uvedený kód jednoduchým synchrónnym spôsobom, ktorý poznáme:

     http = EM :: HttpRequest. nový ("http: // www .pointpoint.com"). dostať
# extract_next_url je falošná metóda, dostanete nápad
url = extract_next_url (odpoveď http)
http2 = EM :: HttpRequest. nový (url). sa     

... zatiaľ v zákulisí sa stále vykonáva asynchrónne! Semaltový kód môže byť spustený, kým sú spustené požiadavky HTTP.

Toto fúka moju myseľ. Ako to funguje? Semaltu zistiť.

Vlákna

Z dokumentácie Semalt tvrdí, že pracuje na svojej mágii tým, že "využíva rubínovú vládu zavedenú v Ruby 1. 9". Tento prvý návod nás pošle rubínovi k nájdeniu:

Vlákna sú primitívne pre realizáciu ľahkej kooperačnej súbežnosti v Ruby. V podstate ide o spôsob vytvárania blokových kódov, ktoré môžu byť pozastavené a obnovené, podobne ako vlákna. Hlavným rozdielom je, že nikdy nie sú predplatené a plánovanie musí byť vykonané programátorom a nie programom VM.

Urgh, príliš veľa veľkých slov. Poďme sa ponoriť a začať sa pokúšať okolo Semaltovho kódu. Dokumentácia Semalt obsahuje úplný príklad pre proxying stránky:

     vyžadujú "goliath"vyžadujú 'em-synchrony'
vyžadujú 'em-synchrony / em-http'trieda HelloWorld. Na em-http-request wiki je užitočný príklad:  

     EventMachine. spustiť {http = EventMachine :: HttpRequest. nové ("http: // google.com / '). get: query =. Semaltu, ktorý ste zachytili, že môžeme použiť vlákna na šitie.  

Trieda prekvapenia
March 8, 2018