目标:在用户将数据保存到mysql之后,将向所有用户广播新保存的内容的JSON。
实现这一目标的快速和肮脏的解决方案是什么?我正在使用php/mysql。尝到了Socket.io的味道,还有一台node.js服务器在侧边监听.
任何好的链接都将不胜感激。
背景这是我的出发点。再次感谢!!
发布于 2012-03-29 03:09:26
如果您想向包括您自己在内的所有用户广播,那么您应该使用:
io.sockets.emit('global', {data: 'this will be received by everyone'}); 如果您想在不通知您的情况下向所有用户广播,那么您应该使用:
socket.broadcast.emit('Hello everyone!');希望这能有所帮助!
发布于 2012-03-29 22:17:49
在这种情况下,你能定义你所说的“广播”是什么意思吗?
要在网页上显示警报吗?
如果是这样的话,您是否只想提醒那些目前正在您的网站上查看页面的用户,还是那些在一段时间内访问您的站点的用户?如果是后者,您是否关心警报是否不止一次出现在单个用户身上?
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(),您可以设置一些东西,这样现在to就可以拦截/nowjs/now.js的请求,并在不调用requestHandler()的情况下将其服务回客户端。
此外,此解决方案不会向从服务器发送警报后连接的任何人显示您的警报。如果你想这样做,你需要做一些不同的事情。
https://stackoverflow.com/questions/9918314
复制相似问题