>백엔드 개발 >PHP 문제 >PHP로 채팅방 아이디어를 구현하는 방법

PHP로 채팅방 아이디어를 구현하는 방법

藏色散人
藏色散人원래의
2021-09-10 10:40:232152검색

PHP에서 채팅방을 구현하는 아이디어는 다음과 같습니다. 1. 테이블을 만듭니다. 2. 데이터베이스에 연결하기 위해 "connect.php"를 설정합니다. 3. 사용자 채팅 인터페이스 파일 "client.php"를 만듭니다. 4. 고객 서비스 응답 정보에 대한 쿼리를 구현합니다. 5. 고객 서비스 채팅 페이지 "server.php"를 설정합니다. 6. 사용자에게 메시지를 보냅니다.

PHP로 채팅방 아이디어를 구현하는 방법

이 글의 운영 환경 : Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP로 채팅방을 구현한다는 아이디어

간단한 구현에 대한 자세한 설명 PHP 대화방 방법

이 글에서는 PHP 대화방을 예시와 함께 설명합니다. 간단한 구현 방법입니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

사용자 => 고객 서비스(먼저 정보를 데이터베이스에 저장한 다음 데이터베이스에서 지속적으로 데이터를 쿼리하고 ob+ 긴 연결을 통해 고객 서비스에 보냅니다. )

Customer Service => 사용자 (먼저 사용자 정보를 받은 다음 응답 정보를 데이터베이스에 저장하고 마지막으로 ajax 폴링을 통해 지속적으로 데이터를 요청하여 사용자 채팅 인터페이스에 표시합니다)

[참고:] 모두 페이지가 설정되면 먼저 고객 서비스 채팅 페이지(server.php)에 연결한 다음 사용자 페이지(client.php)에 연결합니다.

그림 설명:

1단계: 테이블 만들기

지침 : rec: 정보를 받는 당사자, sender: 정보를 보내는 당사자, content: 보내는 내용, is_new: 표시, 1은 새 메시지입니다. 2는 읽은 메시지입니다(기본값은 1)

CREATE TABLE `chat_log` (
 `log_id` int(11) NOT NULL AUTO_INCREMENT,
 `rec` varchar(10) NOT NULL COMMENT '接受方',
 `sender` varchar(10) NOT NULL COMMENT '发送方',
 `content` text NOT NULL COMMENT '发送内容',
 `is_new` tinyint(4) NOT NULL DEFAULT '1' COMMENT '信息 1新信息 0 已读信息',
 PRIMARY KEY (`log_id`,`rec`)
) ENGINE=MyISAM AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COMMENT='用户客服聊天轮询表'

Step 2: 데이터베이스 링크: connect.php

$link = mysql_connect('localhost', 'root', '');
mysql_query("set names utf8");
mysql_select_db("chat");

3단계: 사용자 채팅 인터페이스: client.php

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>User窗口</title>
  <style>
    #user {
      width: 440px;
      height: 300px;
      border: 1px solid blue;
    }
  </style>
  <script src=&#39;http://code.jquery.com/jquery-latest.js&#39;></script>
  <script>
    $(function () {
      $("#btn").click(function () {
        var content = $("textarea").val();
        if(content == &#39;&#39;){alert(&#39;发送内容不能为空&#39;);return;}
        // 发送给客服
        <!-- 把提交数据通过toServer.php存入数据库-->
        $.post("toServer.php", {&#39;msg&#39;:content}, function (res) {
          var obj = JSON.parse(res);
          $("#user").append("<b>你向客服发送:</b>" + obj + "<br>");
          $("textarea").val(" ");
        });
      });
      // 用ajax轮询方式 从数据库获取 客服是否有发送消息给用户
      var polling = {
        "url"   : &#39;fromServer.php&#39;,
        "dataType" : &#39;json&#39;,
        success  : function (res) {
          //ajax请求返回的数据
          var obj = res;
          //追加到User聊天的页面
          $("#user").append("<b style=&#39;color:red&#39;>客服回复:" + obj.content + "</b><br>");
          $.ajax(polling);
        }
      };
      $.ajax(polling); //轮询发送ajax请求
    })
  </script>
</head>
<body>
  <iframe src="" width="0" height="0" frameborder="0"></iframe>
  <h3>与客服聊天窗口</h3>
  <p contenteditable="true" id="user"></p>
  <p>
    <textarea name="msg_list" id="" cols="60" rows="15"></textarea>
    <button id="btn" type="button">send..</button>
  </p>
</body>
</html>

넷째: 사용자는 라이브러리에 메시지를 보내고 Ajax 폴링을 통해 고객 서비스 응답 정보가 있는지 확인합니다

toServer.php

require(&#39;connect.php&#39;);
$msg = htmlspecialchars($_POST[&#39;msg&#39;], ENT_QUOTES);
$sql = "INSERT INTO `chat_log` (rec, sender, content) VALUES(&#39;admin&#39;, &#39;user&#39;, &#39;$msg&#39; )";
mysql_query($sql, $link);
echo json_encode($msg);

fromServer.php

require(&#39;connect.php&#39;);
set_time_limit(0);//永不超时
while (true){
    $sql = "SELECT * FROM `chat_log` WHERE rec=&#39;user&#39; AND is_new=1 ORDER BY log_id DESC LIMIT 1";
    $res = mysql_query($sql, $link);
    if($row = mysql_fetch_assoc($res)){
      $sql = "UPDATE `chat_log` SET is_new=0 WHERE log_id=".$row[&#39;log_id&#39;];
      mysql_query($sql,$link);
      die(json_encode($row));
    }
}

5단계: 고객 서비스 채팅 페이지 server.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>客服窗口</title>
  <style>
    #server {
    width: 440px;
    height: 300px;
    border: 1px solid blue;
    }
  </style>
  <script src=&#39;http://code.jquery.com/jquery-latest.js&#39;></script>
  <!-- 进行ob缓存输出 -->
  <script>
    function showMsg(res) {
      var obj = eval(res);
      $("#server").append("<b style=&#39;color:red&#39;>User向你发送:" + obj.content + "</b><br/>");
    }
    //回复User信息
    $(function () {
      $("#btn").click(function () {
        var content = $("textarea").val();
        //客服发送的信息通过toClient.php存入数据库
        $.post("toClient.php", {&#39;msg&#39;:content},function (res) {
          var obj = JSON.parse(res);
          $("#server").append("你向User发送:" + obj+ "<br>");
          $("textarea").val("");
        })
      });
    })
  </script>
</head>
<body>
  <iframe src="./fromClient.php" width="0" height="0" frameborder="0"></iframe>
  <h3>与User聊天窗口</h3>
  <p contenteditable="true" id="server"></p>
  <p>
    <textarea name="msg_list" id="" cols="60" rows="15"></textarea>
    <button id="btn" type="button">send..</button>
  </p>
</body>
</html>

6단계: 고객 서비스 쿼리 데이터베이스에 사용자가 보낸 정보가 있는지 확인 + 사용자에게 메시지 보내기

fromClient.php

require(&#39;connect.php&#39;);
ob_start();       //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面
echo str_repeat(&#39;&#39;, 4096);
ob_end_flush();     //发送内部缓冲区到浏览器,删除缓冲区内容,关闭缓冲区
ob_flush();       //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区
set_time_limit(0);//永不超时
while(true){
    $sql = "select * from `chat_log` where rec= &#39;admin&#39; and is_new= 1 ORDER BY log_id DESC LIMIT 1 ";
    $res = mysql_query($sql, $link);
    if($row = mysql_fetch_assoc($res)){
      $sql = "UPDATE `chat_log` SET is_new=0 where log_id=".$row[&#39;log_id&#39;];
      mysql_query($sql, $link);
      echo "<script>parent.showMsg(".json_encode($row).")</script>";
      ob_flush();
      flush();      //将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,全部输出至浏览器;刷新内部缓冲区的内容,并输出
      sleep(1);
    }
}

toClient.php

require(&#39;connect.php&#39;);
$msg = htmlspecialchars($_POST[&#39;msg&#39;], ENT_QUOTES);
if(!empty($msg)){
    $sql = "insert into chat_log(rec, sender, content) values(&#39;user&#39;, &#39;admin&#39;, &#39;$msg&#39;)";
    mysql_query($sql);
    echo json_encode($msg);
}

여기서 컴퓨터에서 채팅(server.php 및 client.php)을 실행하고 있습니다. 처음에는 멈췄지만 잠시 후에는 나아졌습니다. 이유는 잘 모르겠습니다. 아시는 분 계시면 알려주시면 정말 감사하겠습니다.
(긴 연결로 인해 발생하는 것으로 알고 있습니다.)

[추천 학습: "PHP 비디오 튜토리얼"]

위 내용은 PHP로 채팅방 아이디어를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.