大家
我在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);
答案 0 :(得分:2)
这是你的第一个问题。当有人访问您的主机时,您正在收集帽子作为最后一条消息收集,并且您将其发送到浏览器。并关闭连接。要将实时事件传输到浏览器,您应该使用基于socket
的机制,例如socket.io
。
要连接到此服务器,您必须使用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打开一个套接字,并保持它直到用户diconnects。请参阅手册如何创建IO服务器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
并使其正常运行。