文档介绍:Perl and work Programming
Naoya Ito
naoya at
Why work programming?
httpd is boring
Some recent web application have special feature working.
Comet
Socket API of ActionScript 3
mini server for development, like Catalyst's
Agenda
work programming basics with Perl
I/O multiplexing
Perl libraries for work programming
work programming basics with Perl
BSD Socket API with C
int main (void) {
int listenfd, connfd;
struct sockaddr_in servaddr;
char buf[1024];
listenfd = socket(, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
= ;
= htonl(INADDR_ANY);
= htons(9999);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(listenfd, 5);
for (;;) {
connfd = accept(listenfd, NULL, NULL) ;
while (read(connfd, buf, sizeof(buf)) > 0) {
write(connfd, buf, strlen(buf));
}
close(connfd);
}
}
BSD Socket API
socket()
struct sockaddr_in
bind()
listen()
accept()
read() / write()
close()
work Programming
TMTOWTDI
less code
CPAN
performance is good enough
right design >> ... >> language advantage
BSD Socket API with Perl
#!/usr/local/bin/perl
use strict;
use warnings;
use Socket;
socket LISTEN_SOCK, , SOCK_STREAM, scalar getprotobyname('tcp');
bind LISTEN_SOCK, pack_sockaddr_in(9999, INADDR_ANY);
listen LISTEN_SOCK, SOMAXCONN;
while (1) {
accept CONN_SOCK, LISTEN_SOCK;
while (sysread(CONN_SOCK, my $buffer, 1024)) {
syswrite CONN_SOCK, $buffer;
}
close CONN_SOCK;
}
use IO::Socket
#!/usr/local/bin/perl
use strict;
use warnings;
use IO::Socket;
my $server = IO::Socket::INET->new(
Listen => 20,
LocalPort => 9999,
Reuse => 1,
) or die $!;
while (1) {
my $client = $server->accept;
while ($client->sysread(my $buffer, 1024)) {
$client->syswrite($buffer);
}
$client->close;
}
$server->close;
blocking work I/O
while (1) {
my $client = $server->accept;
while ($client->sysread(my $buffer, 1024)) { # block
$client->syswrite($buffer);
}
$c