从web服务器到客户端的实时通知


Real time notification from web server to client bowers

我正在使用php+mysql开发一个约会中心web应用程序。我目前想做的是发送通知,当一个约会已经从web服务器到客户端/用户bowers没有第三方推手和不使用jQuery SetInterval AJAX请求。我认为SetInterval &AJAX是一种糟糕的方法,因为在客户端和服务器之间会有太多的流量。

我如何实现通知没有轮询服务器与SetInterval?

你可以使用NodeJs。NodeJS是服务器上的javascript,它将内容实时推送到连接的客户端。

它真的很容易使用和设置。你需要一个服务器专用于实时应用程序,我使用http://nodejitsu.com。

服务器端

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')
app.listen(8080);
function handler (req, res) {
// parse URL
var requestURL = url.parse(req.url, true);
// if there is a message, send it
if(requestURL.query.message)
    sendMessage(decodeURI(requestURL.query.message));
// end the response
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("");
}
function sendMessage(message) {
io.sockets.emit('notification', {'message': message});
}
客户端

<script src="socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('notification', function (data) {
    console.log(data.message);
});
</script>

我在下面添加了@intivev的易于使用的示例,以供将来的读者完成答案

你可以使用WebSockets, Ratchet是建立在React库之上的PHP实现。我已经在生产应用程序中使用了这两个库,并且对它们非常满意。

是的,使用node.js是一个选择,也许是一个更好的选择-取决于你当前的情况。

安东尼。

我觉得你为这个目的选择了错误的语言(PHP),可能有一种方法可以在PHP中做到这一点,但我很确定这将是一个扭曲的。我建议使用node.js来实现这一目的,因为使用它可以以更简单的方式完成向客户端推送通知

服务器端

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, url = require('url')
app.listen(8080);
function handler (req, res) {
// parse URL
var requestURL = url.parse(req.url, true);
// if there is a message, send it
if(requestURL.query.message)
    sendMessage(decodeURI(requestURL.query.message));
// end the response
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("");
}
function sendMessage(message) {
io.sockets.emit('notification', {'message': message});
}
客户端

<script src="socket.io.min.js"></script>
<script>
var socket = io.connect('http://localhost:8080');
socket.on('notification', function (data) {
    console.log(data.message);
});
</script>

所以如果你使用合适的语言你会发现这很容易