我正在使用 php+mysql 开发约会中心 Web 应用程序。我目前正在尝试做的是在没有第三方推送器且不使用 jQuery SetInterval AJAX 请求的情况下从 Web 服务器向客户端/用户 Bowers 进行预约时发送通知。我认为 SetInterval & AJAX 是一种不好的方法,因为客户端和服务器之间的流量会太多。
如何在不使用 SetInterval 轮询服务器的情况下实现通知?
我正在使用 php+mysql 开发约会中心 Web 应用程序。我目前正在尝试做的是在没有第三方推送器且不使用 jQuery SetInterval AJAX 请求的情况下从 Web 服务器向客户端/用户 Bowers 进行预约时发送通知。我认为 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>
因此,如果您使用合适的语言,您会发现它很容易