我有以下问题:我正在尝试使用sockets.io模块发送AMI(asterisk.io)收集的数据,但是我很难在html文件中打印它。在下面的代码中,想法是在数据进入时在控制台上显示它。我真的不知道如何使这项工作,任何人都可以帮助我吗?谢谢!
html文件:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.on('data', function(data){
console.log(data);
});
</script>
带有socket.io文件的asterisk.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 :(得分:0)
目前,您已将其设置为仅在客户端发出data
事件时服务器才会发出data
事件。我从您的描述中相信您希望服务器在ami data
事件上向客户端发出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);
});
});
});
});