swoole 超簡單 構建聊天室.資辭 羣聊,組聊,單聊.

今天來作一個簡單的聊天室,支持換房間,支持私信的. 寫的代碼有點渣,裏面有不少不是很好的地方.畢竟我只是一個野生程序猿.

環境:
 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

clipboard.png

我不想把代碼發到個人服務器上,由於這個項目過小了.很垃圾.並且怕被攻擊.
這裏有錄的一個演示視頻(bilibili沒有廣告的).大家能夠看一下,
大家也能夠直接到github 把源碼下載下來, 絕對有用.很差用找我.
把個人ip地址 192.168.1.109改爲大家的ip就能用了.
我這裏作了3個房間,首次登陸是在公共聊天室.能夠隨意切換到文人雅士專區,固然了也能夠選擇去死肥宅那一欄.
流程差很少是這樣:git

  1. 登陸一個聊天室github

    1.1 後臺觸發open 事件. 此時判斷是初次登陸仍是已註冊以後刷新的,若是是註冊刷新的話 將session中保存的用戶
       信息發送給swoole服務器 並進行註冊.而後返回註冊成功或者失敗,還有當前在線的用戶列表
       若是是新用戶,那麼就直接將當前所在的聊天室的全部用戶列表發送給客戶端.二者都會插入新數據進redis數據庫

    1.2 此時若是不註冊 那麼就沒法發消息給當前分組,若是註冊的話 先去網站後臺驗證session 驗證碼 並將使用的用戶名web

    和時間戳和鹽進行sha256信息摘要.而後向swooleWebSocket服務器請求註冊.此時服務器會判斷 若是用戶信息的前6個字母
       是tokenR 而且當前未註冊 若是token 驗證成功那麼就插入redis數據庫,並通知客戶註冊成功,再通知客戶所在組的全部用戶
       添加用戶用戶(就是當前在線那一欄)
       代碼差很少是這樣的

    clipboard.png

  2. 此時已經登陸成功了,能夠隨意切換分組了.每次切換分組用戶的編號都會重設.由於swoole規定就是這樣,只要斷開鏈接,
    以後的鏈接就是一個新鏈接,好比以前的socket號 是1 那麼斷開後下一個就是2.可是根據session 判斷是能夠保存住用戶名,
    而使刷新以後仍是以前的用戶名.(可是這)
    2.1redis

    公共聊天室的人聊天只有公共聊天室人看見,文人雅士專區只有文人雅士看見.

    2.2sql

    私信單聊只有對方能夠看見,別人都看不見 這個主要就是將發送的信息前6個字母寫成sendTo
       代碼流程差很少是這樣的.

    clipboard.png

哎呀我發現流程好少啊.仍是看後臺吧.

後臺主要就是我新建的一個叫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...服務器

相關文章
相關標籤/搜索