2013-05-08 84 views
2

如何在node.js和perl Catalyst應用程序之間進行通信?如何溝通Catalyst和Node.js

我有兩個應用程序:Node.js和Catalyst。

現在這兩個應用程序通過HTTP進行通信。但這不是快速和安全的方式。

什麼是另一種溝通其方式,如本地Unix套接字或其他方式?

可以使用哪些perl模塊和node.js包?

回答

1

幾個選項:

ZeroMQ - Node binding; Perl binding

dnode - perl dnode protocol support

大量的消息傳輸(如RabbitMQ的)和網絡通信的可能性......但它肯定會是不錯的堅持與HTTP(在SSL/TLS的頂部)爲所有支持這將隨之而來。

+0

都在同一服務器託管的這兩個應用程序。沒有網絡通信(本地)很適合我=) 另外我只需要在其 – 2013-05-08 14:47:27

+0

之間發送數據我想你可以編寫一個使用libperl ++的本機節點擴展,或者甚至從節點產生perl腳本,但是這看起來比值得的。網絡通信協議抽象(技術無關)使您可以橋接語言堆棧,並將兩個應用程序鬆散耦合。我的建議,即使是本地依賴(當橋接node.js - > perl時)。 – 2013-05-08 20:42:17

+0

ZeroMQ很酷!謝謝!它使我的應用程序在將來非常靈活和可擴展 – 2013-05-28 14:11:43

1

這是太多寫關於您的問題,一個完整的答案,因爲我還沒有催化劑,因爲很久以前的工作,但在這裏你去一個簡單的工作Unix套接字Perl的服務器,節點客戶端建議

服務器:

#!/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()) }); 
});