从node.js向bash发送和执行命令



我正在为Asterisk开发一种Flash操作符面板,但是使用Node.js和Socket。

我已经打磨了节点服务器和前端但是我不知道如何将事件从Asterisk发送到节点服务器并做将通过套接字发送的事情。

考虑到我们有一个经过大量调整的Asterisk来满足我们公司的需求,连接到AMI或Asterisk套接字将解决我的问题,因为我们没有使用真正的扩展。

所以,除了Asterisk部分,我想知道如何通过bash或卷发或其他方式向节点发送信息

我考虑过使用卷曲到服务器,但这可能导致知道命令的人(不太可能)可以用不真实的数据改变应用程序流。

编辑:重新考虑一下,我只是想能够通过套接字/服务器接收请求??然后能够执行将通过socket.io发出的操作。

这可能吗?

答案实际上取决于您试图从Asterisk到Node获取的具体数据。您正在尝试替换Flash操作符面板,但您没有真正的扩展。我猜你正在使用星号作为各种SBC/代理。

如果您真的想要一个事件驱动的方法,我建议修改您的拨号计划,以便在需要时使用您想要的任何数据访问Node。通过调用带有一定数量参数(以任何语言编写)的AGI脚本,然后通过HTTP POST、套接字或其他方式连接到Node,可以最容易地实现这一点。

如果您想要一种更被动的方法,您可以让Node流式读取星号日志文件中的数据,或者,如前面所建议的,连接到星号管理器接口(asterisk Manager Interface, AMI)并从那里进行流处理。与前面所说的相反,我不认为这是一项非常艰巨的任务。

您想要打开从Node到Asterisk的AMI (Asterisk管理器接口)的套接字。我从未使用过Node,但我可以想象代码大致如下:

var astman = new net.socket().connect(5038);//connect to port 5039 on localhost
astman.on('data', function(data) {
    //do something with received data
});
其中一个维护得最好的ami库是FreePBX的php-astmanager。虽然它是用php编写的,但它应该能让你很好地了解你需要做什么。

当然可以设置node.js程序在套接字上监听来自Asterisk的消息。但是您必须使用自己的连接管理方案、身份验证方案、消息持久性(可能)等。

或者——特别是如果节点服务器和星号服务器不在同一台机器上——你可以使用消息队列程序,比如RabbitMQ。这处理了进程间通信中涉及的许多重要细节。这也很简单。在节点端,查看https://github.com/postwait/node-amqp

我从来没有使用过Asterisk,但是运行命令行程序可以用child_process模块来完成。

http://nodejs.org/docs/latest/api/child_processes.html

相关内容

  • 没有找到相关文章

最新更新