🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
1 messages
1 total messages Started by menth0l Thu, 08 Apr 2010 13:42
SOAP::Lite a adres ip clienta
#51868
Author: menth0l
Date: Thu, 08 Apr 2010 13:42
44 lines
2577 bytes
Mam sobie wątek nasłuchujący na określonym porcie:

sub webService
{
    use SOAP::Transport::HTTP;
    $daemon = new SOAP::Transport::HTTP::Daemon(LocalAddr =>
'0.0.0.0', LocalPort => $port);
    $daemon->dispatch_to('./WebService/');
    $daemon->handle;
}

W module WebService/Functions w katalogu WebService mam funkcję 'foo'
którą wywołuję z klienta:

my $soap_response = SOAP::Lite->
	uri("http://localhost:$port/Functions")->
	proxy("http://localhost:$port")->
	foo();

W zasadzie wszystko działa ale nie mogę rozgryźć jednego: jak w
funkcji foo dobrać się do adresu ip klienta? Googlując znalazłem nieco
informacji ale wszystkie dotyczyły S::L + Apache...

Drugie pytanie: czy można z poziomu funkcji 'foo' sprawdzić czy
połączenie z klientem nadal istnieje? Przypuśćmy że foo() oblicza coś
złożonego i zajmuje mu to sporo czasu. Teraz: ktoś wywołuje foo() i
zaraz potem się rozłącza (np. ubija proces). W tym wypadku serwer
pracuje nadaremnie i zasoby są cały czas zajęte do czasu
wyprodukowania odpowiedzi tylko po to żeby wyrzucić je w pustkę...
Fajnie by było gdyby można było robić coś w stylu:

sub foo
{
    # zatrzymaj przetwarzanie jesli klient zerwal polaczenie
    while (isClientSessionActive() and not $finished)
    {
        doSth();
    }
}

Czy coś takiego jest wykonalne w obrębie SOAP::Lite?

--
menth0l
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads