首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Node服务器向用户广播Json?

如何通过Node服务器向用户广播Json?
EN

Stack Overflow用户
提问于 2012-03-29 02:27:26
回答 2查看 420关注 0票数 0

目标:在用户将数据保存到mysql之后,将向所有用户广播新保存的内容的JSON。

实现这一目标的快速和肮脏的解决方案是什么?我正在使用php/mysql。尝到了Socket.io的味道,还有一台node.js服务器在侧边监听.

任何好的链接都将不胜感激。

背景这是我的出发点。再次感谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-29 03:09:26

如果您想向包括您自己在内的所有用户广播,那么您应该使用:

代码语言:javascript
复制
io.sockets.emit('global', {data: 'this will be received by everyone'}); 

如果您想在不通知您的情况下向所有用户广播,那么您应该使用:

代码语言:javascript
复制
socket.broadcast.emit('Hello everyone!');

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2012-03-29 22:17:49

在这种情况下,你能定义你所说的“广播”是什么意思吗?

要在网页上显示警报吗?

如果是这样的话,您是否只想提醒那些目前正在您的网站上查看页面的用户,还是那些在一段时间内访问您的站点的用户?如果是后者,您是否关心警报是否不止一次出现在单个用户身上?

Socket.IO是向远程浏览器/从远程浏览器发送/接收消息的一种方式,但如果没有客户端处理程序向用户显示消息的某种方式,这就有点毫无意义了。

我发现now.js是浏览器<-->服务器通信的一个更好的抽象,如这个可能的解决方案所示,它将在用户当前查看的页面上显示警报:

步骤1:安装now.js (如果您不希望现在全局安装-g ):

npm install -g now

步骤2:创建HTTP服务器并使其在端口80上侦听

代码语言:javascript
复制
var PORT=80,
    http=require('http'),
    nowjs=require('now'),
    app=http.createServer(requestHandler).listen(PORT), // create your server
    everyone=nowjs.initialize(app); // initialize now on your listening server

function alertUsers(msg){ // sends msg to showAlert() callback on clients
    everyone.now.showAlert(msg); 
}

function requestHandler(req,res) {
    ...
    ...
    /* 
     * Ok, something has happened you want to inform your currently
     * connected users of...
     * 
     * if the thing can happen as a result of a request, do it here
     */
    var msg="Whoohoo! Something's happened!";
    alertUsers(msg);
    ...
    ...
}

// or if it happens somewhere else, just call alertUsers() there.

步骤3:然后在浏览器端HTML中:

代码语言:javascript
复制
    <html>
        <head>
            <style type="text/css">
                .alert  { background-color:red; color:white; font:24pt bold sans-serif; }
                .hidden { display:hidden; visibility:none; }
            </style>
        </head>
        <body>
            <div id="alert" class="alert hidden">
            <div class="main-content">
                <!-- main page content -->
            </div>
            <script type="text/javascript" src="...load jQuery here..."></script>
            <script src="/nowjs/now.js"></script> <!-- *SEE NOTE BELOW -->
            <script type="text/javascript>
                $(document).ready(function(){ 
                    // after the document has finished loading
                    now.showAlert=function(msg){ // define your callback function
                        $('#alert').removeClass('hidden').text(msg);
                    };
                });
            </script>
        </body>
    </html>

*请注意,<script src="/nowjs/now.js"></script>请求是神奇的,因为在该位置上引用的文件实际上并不存在服务器端。通过在您的http服务器实例上运行nowjs.initialize(),您可以设置一些东西,这样现在to就可以拦截/nowjs/now.js的请求,并在不调用requestHandler()的情况下将其服务回客户端。

此外,此解决方案不会向从服务器发送警报后连接的任何人显示您的警报。如果你想这样做,你需要做一些不同的事情。

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

https://stackoverflow.com/questions/9918314

复制
相关文章

相似问题

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