2017-01-05 27 views
0

我遇到以下问题:我尝试使用sockets.io模块发送由AMI(asterisk.io)收集的数据,但我无法打印它在html文件中。在下面的代码中,这个想法是当数据进入时在控制台上显示它。我真的不知道如何使这项工作,任何人都可以帮助我?谢谢!使用node.js和socket.io发送异步信息

HTML文件:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io(); 
    socket.on('data', function(data){ 
    console.log(data); 
    }); 
</script> 

asterisk.io与socket.io文件:

var socket = require('../app'); 
require('events').EventEmitter.prototype._maxListeners = 1000; 
var aio = require('asterisk.io'); 

var io = socket.io; 
var ami = null; 
ami = aio.ami(
    '192.168.0.7', 
    5038, 
    'admin', 
    'admin' 
); 
ami.on('error', function(err){ 
    throw err; 
}); 
io.on('connection', function(socket){ 
    ami.on('ready', function(){ 
    ami.action('SIPpeers', {}, function(data){ 
     ami.on('eventPeerEntry', function(data){ 
     socket.on('data', function(data){ 
      io.emit('data', data); 
     }); 
     }); 
    }); 
    }); 
}); 

我app.js文件:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var app = express(); 
var http = require('http').Server(app); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 
var io = require('socket.io')(http); 
exports.io = io; 

(...) 

//Execute main 
http.listen(7777, function(){ 
    console.log("Running..."); 
}); 

[编辑] 后在Vaterrenanburg的帮助下,这是正确的代码:

asterisk.io

io.on('connection', function (socket) { 
    ami.action('SIPpeers', {}, function(data){ 
    ami.on('eventPeerEntry', function(data){ 
     socket.emit("peer", data); 
    }); 
    }); 
}); 

HTML文件:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('peer', function (data) { 
     (...) 
     console.log(data); 
    }); 
</script> 

回答

0

目前,你有它设置,使服务器发出仅当客户端发出data事件data事件。我相信从您的描述中,您希望服务器将data事件发送到客户端上的事件ami eventPeerEntry事件。为此,请删除订阅服务器上的data事件。

io.on('connection', function(socket){ 
    ami.on('ready', function(){ 
    ami.action('SIPpeers', {}, function(data){ 
     ami.on('eventPeerEntry', function(data){ 
     io.emit('data', data); 
     }); 
    }); 
    }); 
}); 
+0

谢谢。你是对的!我必须改变前端,以便它可以接收。所以我不得不在服务器代码中做一些小的改变来发送数据。 – SlowHusky

+0

我很高兴我的文章帮助您找到解决方案!如果有答案回答你的问题,这个网站的工作方式,你会“接受”的答案,更在这里:[我应该做什么当有人回答我的问题?](http://stackoverflow.com/帮助/人,答案)。但前提是你的问题确实得到了回答。如果不是,请考虑在问题中添加更多详细信息。我会在你的问题上留下这个评论,但我还没有足够的声望。 – Vaterrenanburg

相关问题