全異步非阻塞Server,能夠同時支持數百萬TCP鏈接在線html
同時支持websocket+comet2種兼容協議,可用於全部種類的瀏覽器包括IEhtml5
擁有完整的UI界面linux
支持單聊/羣聊/組聊等功能nginx
支持發送表情web
支持永久保存聊天記錄shell
基於Server PUSH的即時內容更新,登陸/登出/狀態變動/消息等會內容即時更新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://127.0.0.1:9503', );
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版本的實現。