使用PHP+Swoole實現的網頁即時聊天工具:PHPWebIM

jopen 10年前發布 | 767K 次閱讀 PHPWebIM 電話/通訊/IM聊天

使用PHP+Swoole實現的網頁即時聊天工具

  • 全異步非阻塞Server,可以同時支持數百萬TCP連接在線

  • 同時支持websocket+comet2種兼容協議,可用于所有種類的瀏覽器包括IE

  • 擁有完整的UI界面

  • 支持單聊/群聊/組聊等功能

  • 支持發送表情

  • 支持永久保存聊天記錄

  • 基于Server PUSH的即時內容更新,登錄/登出/狀態變更/消息等會內容即時更新

    最新的版本已經可以原生支持IE系列瀏覽器了,基于Http長連接

    安裝

    swoole擴展

    pecl install swoole

    swoole框架

    composer install

    運行

    將client目錄配置到Nginx/Apache的虛擬主機目錄中,使client/index.html可訪問。修改client/config.js中,IP和端口為對應的配置。

    php webim_server.php

    詳細部署說明

    1.安裝composer(php依賴包工具)

    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer

    注意:如果未將php解釋器程序設置為環境變量PATH中,需要設置。因為composer文件第一行為#!/usr/bin/env php,并不能修改。更加詳細的對composer說明:http://blog.csdn.net/zzulp/article/details/18981029

    2.composer install

    切換到PHPWebIM項目目錄,執行指令composer install,如很慢則

    composer install --prefer-dist

    3.Ningx/Apache配置(這里未使用swoole_framework提供的Web AppServer)

    nginx

    server
    {
        listen       80;
        server_name  im.swoole.com;
        index index.shtml index.html index.htm index.php;
        root  /path/to/PHPWebIM/client;
        location ~ .*\.(php|php5)?$
        {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
        }
        access_log  /Library/WebServer/nginx/logs/im.swoole.com  access;
    }

    apache

    <VirtualHost *:80>
        DocumentRoot "path/to/PHPWebIM/client"
        ServerName im.swoole.com
        AddType application/x-httpd-php .php
        <Directory />
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
            DirectoryIndex index.php
        </Directory>
    </VirtualHost>

    4.修改配置PHPWebIM/config.php

    $config['server'] = array(
        //監聽的HOST
        'host' => '0.0.0.0',
        //監聽的端口
        'port' => '9503',
        //WebSocket的URL地址,供瀏覽器使用的
        'url' => 'ws://127.0.0.1:9503',
    );

    • server.host server.port 項為WebIM服務器即WebSocket服務器的IP與端口,其他選擇項根據具體情況修改
    • server.url對應的就是服務器IP或域名以及websocket服務的端口,這個就是提供給瀏覽器的WebSocket地址
    • webim.data_dir用于修改聊天記錄存儲的目錄,必須有可寫權限

    5.啟動WebSocket服務器

    php PHPWebIM/webim_server.php

    IE瀏覽器不支持WebSocket,需要使用FlashWebSocket模擬,請修改flash_policy.php中對應的端口,然后啟動flash_policy.php。

    php PHPWebIM/flash_policy.php

    6.綁定host與訪問聊天窗口(可選)

    如果URL直接使用IP:PORT,這里不需要設置。

    vi /etc/hosts

    增加

    127.0.0.1 im.swoole.com

    用瀏覽器打開:http://im.swoole.com

    快速了解項目架構

    1.目錄結構

    + PHPWebIM
      |- webim_server.php //WebSocket協議服務器
      |- config.php // swoole運行配置
      |+ swoole.ini // WebSocket協議實現配置
      |+ client
        |+ static
        |- config.js // WebSocket client配置
        |- index.html // 登錄界面
        |- main.html // 聊天室主界面
      |+ data // 運行數據
      |+ log // swoole日志及WebIM日志
      |+ src // WebIM 類文件儲存目錄
        |+ Store
          |- File.php // 默認用內存tmpfs文件系統(linux /dev/shm)存放天著數據,如果不是linux請手動修改$shm_dir
          |- Redis.php // 將聊天數據存放到Redis
        |- Server.php // 繼承實現WebSocket的類,完成某些業務功能
      |+ vendor // 依賴包目錄

    2.Socket Server與Socket Client通信數據格式

    如:登錄

    Client發送數據

    {"cmd":"login","name":"xdy","avatar":"http://tp3.sinaimg.cn/1586005914/50/5649388281/1"}

    Server響應登錄

    {"cmd":"login", "fd": "31", "name":"xdy","avatar":"http://tp3.sinaimg.cn/1586005914/50/5649388281/1"}

    可以看到cmd屬性,client與server發送時數據都有指定,主要是用于client或者server的回調處理函數。

    3.需要理清的幾種協議或者服務的關系

    http協議:超文本傳輸協議。單工通信,等著客戶端請求之后響應。

    WebSocket協議:是HTML5一種新的協議,它是實現了瀏覽器與服務器全雙工通信。服務器端口與客戶端都可以推拉數據。

    Web服務器:此項目中可以用基于Swoole的App Server充當Web服務器,也可以用傳統的nginx/apache作為web服務器

    Socket服務器:此項目中瀏覽器的WebSocket客戶端連接的服務器,swoole_framework中有實現WebSocket協議PHP版本的服務器。

    WebSocket Client:實現html5的瀏覽器都支持WebSocket對象,如不支持此項目中有提供flash版本的實現。

 網頁即時聊天工具:PHPWebIM

項目主頁:http://www.baiduhome.net/lib/view/home/1416465136852

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!