#!/usr/bin/perl -w use FindBin qw($Bin); use warnings; use strict; $|++; # file: daemon.pl # Herve Saint-Amand # Universitaet des Saarlandes # Tue May 13 19:45:31 2008 # This script starts Moses to run in the background, so that it can be used by # the CGI script. It spawns the Moses process, then binds itself to listen on # some port, and when it gets a connection, reads it line by line, feeds those # to Moses, and sends back the translation. # You can either run one instance of this on your Web server, or, if you have # the hardware setup for it, run several instances of this, then configure # translate.cgi to connect to these. #------------------------------------------------------------------------------ # includes use IO::Socket::INET; use IPC::Open2; #------------------------------------------------------------------------------ # constants, global vars, config my $MOSES = "$Bin/../../../bin/moses"; die "usage: daemon.pl " unless (@ARGV == 3); my $LISTEN_HOST = shift; my $LISTEN_PORT = shift; my $MOSES_INI = shift; #------------------------------------------------------------------------------ # main # spawn moses my ($MOSES_IN, $MOSES_OUT); my $pid = open2 ($MOSES_OUT, $MOSES_IN, $MOSES, '-f', $MOSES_INI, '-t'); # open server socket my $server_sock = new IO::Socket::INET (LocalAddr => $LISTEN_HOST, LocalPort => $LISTEN_PORT, Listen => 1) || die "Can't bind server socket"; while (my $client_sock = $server_sock->accept) { while (my $line = <$client_sock>) { print $MOSES_IN $line; $MOSES_IN->flush (); print $client_sock scalar <$MOSES_OUT>; } $client_sock->close (); } #------------------------------------------------------------------------------