1

如何在基于 PHP 的 webapp 中实现推送通知。我真正想要实现的是在一些用户加入聊天时立即收到通知。

假设两个用户是聊天的参与者,如果第三个用户加入该聊天,则通知其他两个用户。

4

5 回答 5

1

我认为您的意思是使用 Javascript 向用户发出通知。这可以使用 websockets (HTML5) 或每 x 秒调用您的服务器的 javascript 来完成。

Websockets 很难设置是我的经验。

每 x 秒,1 经常浪费资源,并且当您获得大量访问者时会导致很多麻烦。

我使用的解决方案是一个名为pusher的 api 。我只将它用于我自己的应用程序,所以我使用免费版本。但它就像一个魅力,很容易设置

另请查看来自 Anigel的http://en.wikipedia.org/wiki/Push_technology

于 2013-05-01T12:20:32.590 回答
1

NodeJS + SocketIO添加到您的堆栈中怎么样?

SocketIO 让您为您的客户创建一个房间,它可以向一个客户房间发送消息。

让我向您展示一个基本示例:

通知.js

var app = require('http').createServer(), 
    io = require('socket.io').listen(app);

app.listen(3000);

io.sockets.on('connection', function (socket) {
    // Joining a room
    socket.join('chatroom');

    socket.on('newUserJoinRequest', function(data) {
        socket.broadcast.to('chatroom').emit('newUserJoinedNotification', data);
    })

});

客户端.html

<!DOCTYPE html>
<head>   
    <meta charset="utf-8">    
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>    
    <script type="text/javascript" src="http://localhost:3000/socket.io/socket.io.js"></script>
</head>
<body>
    <input type="text"  id="username" placeholder="name">
    <button type="text" id="joinButton">Join</button>
    <div id="responses">   
        <h2>NodeJS+SocketIO responses:</h2>   
        <ul></ul>
    </div>

    <script>
        var socket;
        jQuery(document).ready(function() {
            socket = io.connect('//localhost:3000');

            socket.on('newUserJoinedNotification', function(data) {
                var li = '<li>A new user joined the room: ' + data.name + '</li>';    
                jQuery('#responses ul').append(li);
            });
        });

        jQuery('#joinButton').click(function() {
            var username = jQuery('#username').val();
            socket.emit('newUserJoinRequest', {name: username});
        });
    </script> 

</body>
</html>
于 2013-05-01T14:15:24.017 回答
0

使用 PHP 无法(轻松)实现从服务器到客户端的真正推送。你需要的是投票。您可以在服务器上为每个连接的客户端创建一个消息队列,客户端会使用轮询器自动检索该队列的内容(因此基本上每隔设置的时间间隔进行请求)。

于 2013-05-01T12:22:21.977 回答
0

如果您希望它简单,那么您需要研究轮询、长轮询或使用 api。http://en.wikipedia.org/wiki/Push_technology

当计算机尚未与服务器建立连接并表示它正在等待数据时,无法使用 php 使服务器通过代理、防火墙等打开与计算机上程序的连接。

这实际上就是长轮询所做的,客户端与服务器建立连接并保持打开状态,等待服务器告诉它一些事情,或者直到它超时。如果超时,则重新连接

于 2013-05-01T12:53:12.937 回答
0

您可以设置推送通知,而无需使用 notify.pm 开发自己的应用程序。大约需要 2 行代码,API 在这里: https ://github.com/notifypm/notifypm-php-api

<?php

require_once("notifypm.class.php");

$n = new Notifypm('email', 'password', '.pmNumber');
$n->push('Message!', 'Link (optional)!');

$n->disconnect();
于 2017-11-16T20:35:22.627 回答