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

https://github.com/matyhtf/php-webim php



PHPWebIM

使用PHP+Swoole實現的網頁即時聊天工具,在線體驗地址:http://webim.swoole.com/html

  • 全異步非阻塞Server,能夠同時支持數百萬TCP鏈接在線html5

  • 基於websocket+flash_websocket支持全部瀏覽器/客戶端/移動端linux

  • 支持單聊/羣聊/組聊等功能nginx

  • 支持永久保存聊天記錄git

  • 基於Server PUSH的即時內容更新,登陸/登出/狀態變動/消息等會內容即時更新github

  • 支持發送鏈接/圖片/語音/視頻/文件(開發中)web

  • 支持Web端直接管理全部在線用戶和羣組(開發中)apache

最新的版本已經能夠原生支持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://im.swoole.com:9503',    //用於Comet跨域,必須設置爲web頁面的URL    //好比你的網站靜態頁面放在 http://im.swoole.com:8888/main.html    //這裏就是 http://im.swoole.com:8888    'origin' => 'http://im.swoole.com:8888',);
  • server.host server.port 項爲WebIM服務器即WebSocket服務器的IP與端口,其餘選擇項根據具體狀況修改

  • server.url對應的就是服務器IP或域名以及websocket服務的端口,這個就是提供給瀏覽器的WebSocket地址

  • webim.data_dir用於修改聊天記錄存儲的目錄,必須有可寫權限

  • server.origin爲Comet跨域設置,必須修改origin才能夠支持IE等不支持WebSocket的瀏覽器

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版本的實現。

相關文章
相關標籤/搜索