2013-05-08 86 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()) }); 
});