如何在收到Facebook等新邮件时收到通知

时间:2015-05-17 07:27:58

标签: php jquery mysql ajax

我有一个最多有2个用户的聊天室,当一个用户向另一个用户发送消息时,应该通知第二个用户,就像Facebook一样收到新消息

enter image description here

我已经使用像

这样的Ajax请求完成了它
    $(document).ready(
        function() {
            setInterval(function() {
                $.ajax({
                    url: 'incs/check_new_msg.php' ,
                    cache: false,
                    success: function(data)
                    {
                        $('#message').html(data);
                    },                                          
                });
            }, 1000);
        });

<div id="message"></div>

check_new_msg.php中,我使用以下代码:

$new_msg = mysql_query("select * from inbox where status = '0' ");
echo mysql_num_rows($new_msg);

上面的代码工作正常,但问题是它每秒检查收件箱和新邮件,但它似乎对处理器有害,因为它每秒运行一次MySQL查询,请帮助我如何只在新的时候执行检查查询收到消息。

4 个答案:

答案 0 :(得分:3)

我会给你一个概念然后你应该尝试实施它 从另一台计算机插入内容时创建外部文本文件,并在客户端每秒检查一次相同的文件,而不是检查数据库。如果文件存在则检查数据库,否则继续检查文本文件

答案 1 :(得分:0)

所以你唯一关心的是它每隔一秒运行一次查询吗?

这是我的解决方案:

$(document).ready(
        function() {
            function check_message()
            {
                $.ajax({
                    url: 'incs/check_new_msg.php' ,
                    cache: false,
                    success: function(data)
                    {
                        $('#message').html(data);
                    },
                    complete: function(data)
                    {
                        check_message();
                    },
                });
            }
            check_message();
        });

<div id="message"></div>

这样做会在最后一个ajax请求完成后递归调用ajax。

答案 2 :(得分:0)

实现您讨论的功能的方法之一是长轮询方法。在此方法中,您将连接保持打开一段时间,如果在该时间内发生更改,则会将响应返回给用户。并打开另一个连接,依此类推。

你应该谷歌关于longpolling,因为有很多教程可用。祝你好运

答案 3 :(得分:0)

我找到了一个很好的解决方案,为此,我在脚本所在的同一目录中使用了一个记事本文件。

  1. 从任何计算机插入新记录时,您必须使用插入创建记事本文件。

    $insert = mysql_query("insert into inbox .....");
    
    if(insert)
    {
        if(!file_exists(notepad_file_path))
        {
             fopen(notepad_file_path);
        }
    }
    
  2. 然后我调用ajax请求请求

    $(document).ready(
        function() {
            function check_message()
            {
                $.ajax({
                    url: 'incs/check_new_msg.php' ,
                    cache: false,
                    success: function(data)
                    {
                        $('#message').html(data);
                    },
                    complete: function(data)
                    {
                        check_message();
                    },
                });
            }
            check_message();
        });
    
    <div id="message"></div>
    
  3. 之后在外部ajax文件中检查是否存在记事本文件,如果文件存在则提供对数据库的访问权,这样就不会对处理器造成伤害。

    if(file_exists(notepad_file_path))
    {
        $new_msg = mysql_query("select * from inbox where status = '0' ");
        echo mysql_num_rows($new_msg);
    
        if(mysql_num_rows($new_msg) == 0)
        {
             unlink(notepad_file_path);
        }
    }