我正在处理Node.js和Asterisk AMI的一个项目
Asterisk将事件发送到Node.js服务器,Node.js将Obj中的事件发送到浏览器
我的问题是,当从AMI更新数据时,节点服务器不发送新对象
var AsteriskAmi = require('asterisk-ami');
var ami = new AsteriskAmi( { host: '127.0.0.1', username: 'admin', password: '123456' } );
var Send;
ami.on('ami_data', function(data){
// this obj update when ami send event
Send = data;
});
ami.connect(function(){
});
var http = require('http');
var app = http.createServer(function(req,res) {
res.setHeader('Content-Type': 'text/plain');
//my problem here , object was sent but not update when ami send other object
res.end(Send);
});
app.listen(3000);发布于 2015-04-09 17:05:55
1. res.end(发送)
这是你的第一期。当有人访问您的主机时,您正在发送hat被收集为最后一条消息,并且您正在将其发送到浏览器。和关闭连接。为了将事件实时传输到浏览器,您应该使用诸如socket.io之类的基于socket的机制。
要连接到此服务器,您必须使用html页面。
我的环境中的完整工作版本-使用asterisk-manager
在public_html/test/index.html中
<html>
<body>
<pre id="console">
</pre>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
<script>
var __url = 'http://localhost';
var __port = 3001;
__socketurl = __url + ':' + __port;
socket = io.connect(__socketurl);
socket.on('notification', function (data) {
document.getElementById('console').innerHTML = JSON.stringify(data) + "\r\n";
});
socket.on('ami_event', function (data) {
document.getElementById('console').innerHTML += JSON.stringify(data) + "\r\n";
});
</script>
</body>
</html>上面的代码尝试连接到localhost:3001上的服务器,并打印出来自节点应用程序的每个事件。
在public_html/test/node/app.js中
var app = require('http').createServer().listen(3001);
var io = require('socket.io').listen(app);
var AsteriskAmi = require('asterisk-manager');
var ami = new require('asterisk-manager')('25038','192.168.0.2','amilogin','amipassword', true);
io.sockets.on('connection', function(socket) {
socket.emit('notification', {message: "connected"});
});
ami.on('managerevent', function(data) {
console.log(data);
io.sockets.emit('ami_event', data);
});
ami.connect(function(){
});上面的代码在端口3001打开一个套接字,并保留它,直到用户断开连接。请参考手册如何创建IO servers here。演示教程也可以在那里找到。脚本也会连接到AMI本身,并将AMI中的每个事件传递给通过socket.io连接的每个套接字。
public_html/test/node/packages.json中的包
{
"name": "Server",
"version": "0.0.1",
"private": true,
"dependencies": {
"socket.io": "latest",
"asterisk-manager": "latest"
}
}在app.js中填写了正确的数据以登录AMI,npm install'ed,node app.js,并使其完美地工作。
https://stackoverflow.com/questions/29533257
复制相似问题