如何实现实时实时消息传递jQuery Ajax Mysql Php

时间:2017-05-18 03:36:37

标签: php jquery mysql websocket long-polling

我正在撰写一个非常简单的聊天应用程序。我编写了一个代码,用于在不刷新页面的情况下在数据库中插入数据。但是当我同时测试两个用户时,我只能看到其他用户在发送新消息时发送给我的内容。我怎样才能让它更实用?我花了整整一天阅读Websockets(特别是socket.io,棘轮)和长轮询。我在这附近找到了有趣的解决方案,但我希望用我已编写的代码实现它,这让我感到困惑。我正在使用php while语句从数据库中获取数据。

使用Ajax代码

<script>
$(document).ready(function(){
$("#buttons").click(function(){
var fromuserid = $("#fromUserId").val();
var touserid = $("#toUserId").val();
var chatMessage = $("#chatMessage").val();
// stored in database.
var dataString = 'fromUserId='+ fromuserid + '&toUserId='+ touserid + '&chatMessage='+ chatMessage;
// AJAX
$.ajax({
type: "POST",
url: "chat.php",
data: dataString,
cache: true,
success: function(response){
   $("#displayMessage").html(response);
       $("#chatForm").trigger("reset");
}
});

return false;
});
});
    </script>

while声明

       <div id='displayMessage' style='height: 480px; padding:5%; overflow-x:hidden;'>
        <?php
            $chatmsgQ="SELECT * FROM ve_chat c 
   WHERE c.isActive='1' AND (c.fromUserId='$loginid_session' 
   OR c.toUserId='$loginid_session')";
$chatmsgresult=  mysqli_query($db,$chatmsgQ);
        while($chatmsg=  mysqli_fetch_array($chatmsgresult)){?>
   <?php if($chatmsg['fromUserId']==$loginid_session):?>
   <!-- user one -->
<p class='bubble pull-left'><?=$chatmsg['message'];?></p>
<?php elseif($chatmsg['fromUserId']!=$loginid_session):?>
  <!-- user two-->
<p class='bubbleother pull-right'><?=$chatmsg['message'];?></p>
<?php endif;?>
<?php } ;?>
  </div>

2 个答案:

答案 0 :(得分:2)

在推送消息时,PHP并不是最好的语言,它实际上是围绕典型的get / response kinda流程构建的。

http://www.nodejs.orghttp://socket.io/非常容易设置,并且在您的大部分工作中使用php,然后使用节点来处理推送消息等等。 / p>

答案 1 :(得分:1)

要使您的应用程序更加直播,您需要使用 setInterval方法。使用此项目Simple php, ajax and mysql chat application.