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

Php 从web服务器到客户端浏览器的实时通知,php,jquery,notifications,real-time,Php,Jquery,Notifications,Real Time,我正在使用php+mysql开发一个约会中心web应用程序。我目前试图做的是,在没有第三方推送器和jQuery SetInterval AJAX请求的情况下,从web服务器向客户机/用户bowers发送通知。我认为SetInterval&AJAX是一种糟糕的方法,因为在客户端和服务器之间会有太多的通信量 如何在不使用SetInterval轮询服务器的情况下实现通知?您可以使用NodeJs实现这一点。 NodeJS是服务器上的javascript,它将内容实时推送到连接的客户端 它真的很容易使用和

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


如何在不使用SetInterval轮询服务器的情况下实现通知?

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

它真的很容易使用和设置。 你需要一个专用于实时应用的服务器,我使用

服务器端

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});
}
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>
<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>

var socket=io.connect('http://localhost:8080');
socket.on('notification',函数(数据){
console.log(data.message);
});

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

我觉得您为此目的选择了错误的语言(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});
}
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>
<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>

var socket=io.connect('http://localhost:8080');
socket.on('notification',函数(数据){
console.log(data.message);
});

因此,如果您使用适合它的语言,您会发现它非常简单

您可以使用WebSocket来实现这一点,它是构建在。我已经在生产应用程序中使用了这两个库,并且对它们非常满意

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


Anthony。

说到websocket,node.js当然更好。您可以阅读我对类似问题的回答。我希望有帮助。哦,您不需要节点服务器或其他任何东西。@MDDY我才刚刚开始。请帮忙。从哪里可以获得
socket.io.min.js
文件?你能提供更多关于给定答案的细节吗。