最近也是比較忙,公司打碼,回家繼續打,越忙越折騰! 一個不小心半夜一點了,花了一晚上時間終於把這個分組聊天室寫完了,前兩天剛把fooking的websocket協議加上,純lua實現。
fooking的項目地址:http://git.oschina.net/scgywx/fooking
在線demo地址: http://182.254.135.131/chat/
開發聊天室這基本是上每個搞socket長連接的一個通例了,主要是實現起來簡單,能使用最少的代碼實現客戶端與服務端持久通信,那麼這次也不例外,還是拿聊天室說事,不過這次要"高級"一點,能分組,而不是發個消息就廣播給所有人。當某個用戶向指定組發送數據時,只有在此分組的用戶才能收到消息,別的分組不會收到消息。當然這裏的分組是利用了fooking的一個組播機制,把N個客戶端加入到一個分組(組名可以是任意字符串),發消息的時候只需要指定組名即可(其實也就是存儲一個列表,然後遍歷發送,只是這一步由fooking完成)。
聊天室的界面大概就是如下這樣子,左邊是用戶列表,右上方是頻道列表(可以選擇),下面是消息列表,當選擇一個你沒有加入過的頻道將會彈出“加入此頻道“的按鈕,點擊就能加入該頻道了,剩下的就是聊天了,大致功能就是這樣子。
這樣一個聊天室程序,只需要不到100行php和不到200行html/css/js,其配置也非常簡單,如下步驟:
1、啓動router, 修改項目src目錄下的router.lua配置文件(比如:端口,日誌等),然後執行:./fooking router.lua
2、啓動gateway, 修改項目src目錄下的config.lua配置文件(比如:端口,router端口,script, php程序路徑等,最主要是FASTCGI_ROOT), 然後執行: ./fooking config.lua
注意: 在config.lua裏面配置了script.lua(用於處理打包和解包),在修改config.lua的時候請注意script.lua的路徑
script.lua裏面使用了websocket協議,他需要依賴另一個Sha1.lua文件(在src目錄就有),請注意一定要把script.lua與Sha1.lua放在同一目錄,不然可能會報錯
3、 安裝php-fpm、redis、redis擴展
4、修改example/chat/index.html文件裏面websocket的IP和端口(查找ws://就能找到)