首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Node.js将对象实时发送到浏览器

如何通过Node.js将对象实时发送到浏览器
EN

Stack Overflow用户
提问于 2015-04-09 16:15:05
回答 1查看 1.7K关注 0票数 3

我正在处理Node.js和Asterisk AMI的一个项目

Asterisk将事件发送到Node.js服务器,Node.js将Obj中的事件发送到浏览器

我的问题是,当从AMI更新数据时,节点服务器不发送新对象

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2015-04-09 17:05:55

1. res.end(发送)

这是你的第一期。当有人访问您的主机时,您正在发送hat被收集为最后一条消息,并且您正在将其发送到浏览器。和关闭连接。为了将事件实时传输到浏览器,您应该使用诸如socket.io之类的基于socket的机制。

要连接到此服务器,您必须使用html页面。

我的环境中的完整工作版本-使用asterisk-manager

public_html/test/index.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
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中的包

代码语言:javascript
复制
{
    "name": "Server",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
        "socket.io": "latest",
        "asterisk-manager": "latest"
    }
}

app.js中填写了正确的数据以登录AMI,npm install'ed,node app.js,并使其完美地工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29533257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档