1. 程式人生 > >使用PHP+Swoole實現的網頁即時聊天工具:PHPWebIM(轉)

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

使用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