Schrift
[thread]4422[/thread]

Frage zum Modul PlRPC



<< >> 4 Einträge, 1 Seite
tvix2006
 2006-05-14 12:39
#37255 #37255
User since
2006-05-14
2 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!

Muss sofort gestehen, ich bin ein Layer in Perl. Ich brauche eine RPC-Verbindung zwischen 2 Rechner. Dafür soll ich das Modul PlRPC benutzen: PlRPC by CPAN

Wie es im Beispiel zum RPC::PlServer steht, habe ich einen einfachen Server gestartet:

MyServer.pm:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
  package MyServer;
use RPC::PlServer;

$MyServer::VERSION = '1.0';
@MyServer::ISA = qw(RPC::PlServer);

# Overwrite the Run() method to handle a single connection
sub Run {
my $self = shift;
my $socket = $self->{'socket'};
}

1;


server.pl:

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use MyServer;
my $server = MyServer -> new({'localport'=>'1234',
'pidfile' =>'/home/tvix/server.pid',
}, \@ARGV);

$server->Bind();



Und mein Client sieht wie folgt aus.
client.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 #!/usr/bin/perl
require RPC::PlClient;

# Create a client object and connect it to the server
my $client = RPC::PlClient->new('peeraddr' => 'localhost',
'peerport' => 1234,
'application' => 'server',
'version' => '1.0',
'user' => 'nobody',
'password' => 'hello!' );

# Create an instance of $class on the server by calling
# $class->new() and an associated instance on the client.
my $object = $client->Call('NewHandle', $class, 'new', @args);


# Call a method on $object, effectively calling the same method
# on the associated server instance.
my $result = $object->do_method(@args);


Der Server läuft, aber der Client wird vom Server zurückgewiesen:
Quote
Refused by server: This is a MyServer server, go away! at /usr/lib/perl5/vendor_perl/5.8.7/RPC/PlClient.pm line 82

anscheinend, besteht er den Server-check nicht. Aber wieso?
Könnte mir bitte jemand erklären, wie man mit dem Modul einen brauchbaren Server schreibt?
Da ich wie gesagt nicht viel Ahnung vom Perl habe, fällt es mir ein bischen schwer mit der knappen Doku bei CPAN zu Recht zu kommen.
Danke voraus!
esskar
 2006-05-15 01:03
#37256 #37256
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
server

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl -wT
# Note the -T switch! This is always recommended for Perl servers.

use strict; # Always a good choice.

require RPC::PlServer;
require MD5;


package MD5_Server; # Clients need to request application
# "MD5_Server"

$MD5_Server::VERSION = '1.0'; # Clients will be refused, if they
# request version 1.1
@MD5_Server::ISA = qw(RPC::PlServer);

eval {
# Server options below can be overwritten in the config file or
# on the command line.
my $server = MD5_Server->new({
'pidfile' => '/var/run/md5serv.pid',
'configfile' => '/etc/md5serv.conf',
'facility' => 'daemon', # Default
'user' => 'nobody',
'group' => 'nobody',
'localport' => 2000,
'logfile' => 0, # Use syslog
'mode' => 'fork', # Recommended for Unix
'methods' => {
'MD5_Server' => {
'ClientObject' => 1,
'CallMethod' => 1,
'NewHandle' => 1
},
'MD5' => {
'new' => 1,
'add' => 1,
'hexdigest' => 1
},
}
});
$server->Bind();
};


client

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/local/bin/perl

use strict; # Always a good choice.

require RPC::PlClient;

# Constants
my $MY_APPLICATION = "MD5_Server";
my $MY_VERSION = 1.0;
my $MY_USER = ""; # The server doesn't require user
my $MY_PASSWORD = ""; # authentication.

my $hexdigest = eval {
my $client = RPC::PlClient->new
('peeraddr' => '127.0.0.1',
'peerport' => 2000,
'application' => $MY_APPLICATION,
'version' => $MY_VERSION,
'user' => $MY_USER,
'password' => $MY_PASSWORD);

# Create an MD5 object on the server and an associated
# client object. Executes a
# $context = MD5->new()
# on the server.
my $context = $client->ClientObject('MD5', 'new');

# Let the server calculate a digest for us. Executes a
# $context->add("This is a silly string!");
# $context->hexdigest();
# on the server.
$context->add("This is a silly string!");
$context->hexdigest();
};
if ($@) {
die "An error occurred: $@";
}

print "Got digest $hexdigest\n";
tvix2006
 2006-05-15 17:09
#37257 #37257
User since
2006-05-14
2 Artikel
BenutzerIn
[default_avatar]
Besten Dank esskar!

Natürlich hab ich dieses Beispiel auch gesehen - mit dem kann ich nicht mal den Server starten. Hast du übrigens das selber versucht? Vielleicht habe ich einfach zwei linke Hände, aber bei mir geschieht überhaupt NIX, wenn ich den Server aus deinem Beispiel starte - ich bekomme weder eine Fehlermeldung, noch ein neuer Prozess mit dem Server wird gestartet, so keine Rückmeldung. Deswegen wollte ich ganz klein anfangen und hab den Server-Code so einfach wie möglich gehalten.
Hättest du vielleich noch irgendwelche Ideen?
renee
 2006-05-15 17:37
#37258 #37258
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Trag' mal in Deinem eigenen Beispiel beim Client unter application MyServer[ ein...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 4 Einträge, 1 Seite



View all threads created 2006-05-14 12:39.