使用node.js和socket.io发送异步信息

时间:2017-01-05 19:19:26

标签: javascript node.js sockets

我有以下问题:我正在尝试使用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>

1 个答案:

答案 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);
      });
    });
  });
});