2013-05-08 1 views
2

node.js와 perl Catalyst 응용 프로그램 간의 통신 방법은 무엇입니까?Catalyst 및 Node.js 통신 방법

Node.js와 Catalyst의 두 가지 응용 프로그램이 있습니다.

이제이 두 응용 프로그램은 HTTP로 서로 통신합니다. 그러나 그것은 빠르고 안전하지 않습니다.

로컬 유닉스 소켓 또는 다른 것과 같이 통신하는 다른 방법은 무엇입니까?

어떤 펄 모듈과 node.js 패키지를 사용할 수 있습니까?

답변

1

옵션의 몇 :

ZeroMQ-Node binding; Perl binding

dnode-perl dnode protocol support

지원의 모든

메시지 전송 (예 : RabbitMQ) 및 네트워크 통신을위한 가능성의 많은 ... 그러나 확실히 (SSL/TLS의 상단에) HTTP를 고수하는 것이 좋을 것이다 그걸로 올거야.

+0

동일한 서버에서 호스팅이 두 응용 프로그램의 모든. 아니 네트워크 통신 (로컬)도 나를 위해 =) 또한 그 사이에 데이터를 보낼 필요가 –

+0

당신이 libperl + +를 사용하거나 심지어 노드에서 펄 스크립트를 생성하는 네이티브 노드 확장을 작성할 수 있다고 생각하지만, 이것은 훨씬 더 문제가 될 것 같습니다 그것은 가치가있다. 네트워크 통신 프로토콜 추상화 (기술 불가지론)를 통해 언어 스택을 두 개의 응용 프로그램을 느슨하게 결합하는 이점을 활용할 수 있습니다. 내 추천은 로컬 종속성 (node.js -> perl을 브리징 할 때조차도)이다. –

+0

ZeroMQ 멋진입니다! 감사! 내 응용 프로그램을 매우 유연하고 확장 가능하게 만듭니다. –

1

내가 오래 전부터 촉매와 함께 일을 갖고 있지 않기 때문에, 당신의 문제에 대한 완전한 답을 작성하는 너무 많은,하지만 여기 간단한 작업 UNIX 소켓 펄 서버, 노드 클라이언트의 제안을 갈

서버 :

#!/usr/bin/perl -w -T 

use strict; 
use IO::Socket::UNIX; 
use threads; 

my $socket_path = "/tmp/test_socket"; 
unlink($socket_path); 

my $socket = IO::Socket::UNIX->new(
    Local => $socket_path, 
    Type => SOCK_STREAM, 
    Listen => 1, 
); 

die "Can't create socket: $!" unless $socket; 

print "waiting for connections\n"; 

while (1) { 
    my $client; 

    do { 
     $client = $socket->accept; 
    } until (defined($client)); 

    my $thr = threads->new(\&processit, $client)->detach(); 
} 

sub processit { 
    my ($client) = @_; 

    if($client->connected){ 
     print $client "Hello from server\n"; 

     while(<$client>) { print "$_\n" }; 
    } 
    close($client); 
} 

클라이언트 :

#!/usr/bin/env node 

var net = require('net'), 
    fs = require('fs'), 
    sock; 

var c = net.createConnection('/tmp/test_socket'); 

c.on('connect', function(socket) { 
    console.log('connected'); 
    c.write("Hello from NodeJS"); 
    c.on('data', function(data) { console.log('perl: '+data.toString()) }); 
});