如何通过节点JS服务器向用户广播Json?
目标:用户将数据保存到我的mysql数据库后,新保存的内容的JSON传情会广播给所有用户。如何通过节点JS服务器向用户广播Json?
什么是一些快速和肮脏的解决方案来实现这一目标?我正在使用php/mysql。有一个Socket.io的味道,并在一边听一个node.js服务器....
任何良好的联系将不胜感激。
背景-------- 经过多年的php工作,我决定跳上NodeJS班车,除了香草“Hello World”之外别无其他任何线索......这是我的出发点。再次感谢!!
如果您想广播到所有用户,包括你自己,那么你应该使用:
io.sockets.emit('global', {data: 'this will be received by everyone'});
如果你想播放,而无需自己所有的用户被通知,那么你应该使用:
socket.broadcast.emit('Hello everyone!');
希望这会有所帮助!
您可以在此上下文中定义“广播”的含义吗?
是否要在网页上显示警报?
如果是这样,您是否希望仅提醒当前正在您网站上查看网页的用户或在一段时间内访问您网站的用户?如果后者出现问题,您是否在乎警报是否多次出现给单个用户?
Socket.IO是向/从远程浏览器发送/接收消息的一种方式,但是没有客户端处理程序有一些向用户显示消息的方式,这种方法没有实际意义。
我发现now.js是浏览器的一个更好的抽象< - >服务器的通信,如图中这种可能的解决方案,显示在当前用户浏览网页的警告:
第1步:安装now.js(-g选项去掉,如果你不想现在全球的装机量):
npm install -g now
第2步:创建一个HTTP服务器,并使其侦听端口80上
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:
<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(),你正在设置一些东西,这样nowjs就会拦截/nowjs/now.js
的请求,并在不调用requestHandler()的情况下将其返回给客户端。
此外,此解决方案不会向任何在服务器发送警报后连接的人显示警报。如果你想这样做,你需要做一些不同的事情。
非常有趣!从未听说过这个框架。对于用户采用什么方法向用户“广播”(缺少更好的单词)事件,我仍然处于空中。和“广播”?我一般用这个术语......记住身份验证或任何爵士乐。只是实时分享活动。无论如何..IF这NOW.JS框架是专门设计来做到这一点,然后我可能有相当数量的honework做! – FredTheWebGuy 2012-03-29 23:14:15
谢谢您的及时答复!我是单线玩家的忠实粉丝......我会用我的设置来测试这一点,并很快提供反馈。 – FredTheWebGuy 2012-03-29 23:08:51
它应该工作,我目前正在使用它:) – 2012-03-30 02:04:52