環境: php7.0 apache 2.4 swoole 1.9 redis 4.0
bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...php
樣子差很少是這個樣子的:mysql
我不想把代碼發到個人服務器上,由於這個項目過小了.很垃圾.並且怕被攻擊.
這裏有錄的一個演示視頻(bilibili沒有廣告的).大家能夠看一下,
大家也能夠直接到github 把源碼下載下來, 絕對有用.很差用找我.
把個人ip地址 192.168.1.109改爲大家的ip就能用了.
我這裏作了3個房間,首次登陸是在公共聊天室.能夠隨意切換到文人雅士專區,固然了也能夠選擇去死肥宅那一欄.
流程差很少是這樣:git
登陸一個聊天室github
1.1 後臺觸發open 事件. 此時判斷是初次登陸仍是已註冊以後刷新的,若是是註冊刷新的話 將session中保存的用戶 信息發送給swoole服務器 並進行註冊.而後返回註冊成功或者失敗,還有當前在線的用戶列表 若是是新用戶,那麼就直接將當前所在的聊天室的全部用戶列表發送給客戶端.二者都會插入新數據進redis數據庫
1.2 此時若是不註冊 那麼就沒法發消息給當前分組,若是註冊的話 先去網站後臺驗證session 驗證碼 並將使用的用戶名web
和時間戳和鹽進行sha256信息摘要.而後向swooleWebSocket服務器請求註冊.此時服務器會判斷 若是用戶信息的前6個字母 是tokenR 而且當前未註冊 若是token 驗證成功那麼就插入redis數據庫,並通知客戶註冊成功,再通知客戶所在組的全部用戶 添加用戶用戶(就是當前在線那一欄) 代碼差很少是這樣的
此時已經登陸成功了,能夠隨意切換分組了.每次切換分組用戶的編號都會重設.由於swoole規定就是這樣,只要斷開鏈接,
以後的鏈接就是一個新鏈接,好比以前的socket號 是1 那麼斷開後下一個就是2.可是根據session 判斷是能夠保存住用戶名,
而使刷新以後仍是以前的用戶名.(可是這)
2.1redis
公共聊天室的人聊天只有公共聊天室人看見,文人雅士專區只有文人雅士看見.
2.2sql
私信單聊只有對方能夠看見,別人都看不見 這個主要就是將發送的信息前6個字母寫成sendTo 代碼流程差很少是這樣的.
後臺主要就是我新建的一個叫WebS的類.這個類繼承了SwooleWebsocketServer
並新增一些邏輯方法
主要以下:數據庫
1. checkRegisterName() 檢查用戶名是否能夠用 原型 checkRegisterName(\Redis $redis, string $user_name, \buff\string $reload) : boolean 2. sendToPerson() 發送消息給單個用戶 原型 sendToPerson(integer $fd, string $mes, integer $type, string $sendTo = "", string $user_name = "", \Redis $redis = null) 3. sendToGroup() 發送消息給單個組 原型 sendToGroup(int $frameFd, \Redis $redis, string $user_name, int $type, string $mes = "", string $group = "public") 4. getOnlineUsersList() 獲取當前全部已註冊的用戶列表 原型我就不寫了,下面貼github.源碼註釋好了 5. checkToken() 檢查token 是否正確 6. judgeMesEventType() 判斷用戶發送的消息 分析他想要幹嗎
沒了. 是否是超簡單. 有了swoole 這樣簡單.並且這個是國人開發的! 大家去swoole官網能夠學習,文檔不少,並且swoole功能能強大,
我只看了一點點websocket 那一章的,其餘的基本沒看,由於看不懂! 還有redis 普通用法很簡單.我就是上慕課網> 看了20分鐘這個視頻.>http://www.imooc.com/video/14315 我這裏就是把redis 看成mysql來用的.
而後只用了hash 這一個類型,用了兩三個函數,其餘的都不會.什麼加鎖 只讀之類的都沒有弄
phpredis擴展百度安裝.
這個是一次性完成的,從昨天夜裏開始作,作到早上,沒有檢查,我就看能正常運行,控制檯沒有異常信息 就發上來了.
要是大家遇到問題,我能解決的必定解決. 另外 請你們支持國產優秀做品 swoole!http://swoole.com
swoole 官方qq交流羣 193772828 我在裏面屬於菜逼那種.大家學習swoole 有問題能夠去羣裏交流.
再說一遍 視頻地址(7分鐘 演示)apache
bilibili : https://www.bilibili.com/vide...
github地址:https://github.com/buffge/buf...服務器