https://beltxman.com/1885.html
PHPSocket.IO
的官方介紹:
PHPSocket.IO是PHP版本的Socket.IO服務端實現,基於workerman開發,用於替換node.js版本Socket.IO服務端。PHPSocket.IO底層采用websocket協議通訊,如果客戶端不支持websocket協議, 則會自動采用http長輪詢的方式通訊。PHPSocket.IO實現的Polling通信機制包括Adobe Flash Socket、AJAX長輪詢、JSONP輪詢等。具體采用哪種機制通訊對於開發者完全透明, 開發者使用的是統一的接口。
項目github
地址https://github.com/hsu1943/thinksocketio,項目已經做了很多更新,請按照項目readme
使用。
下面我們使用ThinkPHP5.1
框架來整合PHPSocket.IO
實現客戶端和服務端的通訊。
使用的本地開發環境是PHP5.6.30
+ Apache2.4.25
創建新項目
這樣你的安裝工作就做好了。接下來配置需要的模
配置模塊
結合前陣子的文章:ThinkPHP 5.1自動生成模塊及目錄、文件
我們編輯好build.php
文件:
然后運行
這樣就有了socketio模塊下面controller
有Index.php
和Server.php
兩個控制器和view
下一個index/index
一個視圖。
創建服務端
編輯控制器Server.php
為(具體參考注釋):
為了測試,在數據庫新建了一張表msg
用來存儲客戶端發送過來的消息。
這樣一個可以返回連接成功消息、接收消息、回復消息、存儲消息的簡單服務端就做好了。
創建客戶端
我們在Index.php
控制器中這樣寫:
在對應的模版文件view/index/index.html
中代碼:
到這里,一個具備連接服務端,發送消息,接受並輸出消息到控制台的簡單websocket
客戶端就建好了。
為服務端綁定入口文件
在項目的public
文件夾下新建一個入口文件server.php
並將其綁定到socketio
模塊的Server
控制器index
方法;
入口文件server.php
代碼:
測試通訊
運行服務端
直接運行項目public
目錄下的server.php
;
這個輸出表示PHPSocketIO
已經成功在2021
端口運行監聽中。
我們打開瀏覽器打開http://localhost/thinksocket/public/index.php/socketio/
頁面;
可以看到頁面會彈出‘鏈接成功’,同時可以看到服務端cmd
終端上打印出new connection
,同事瀏覽器控制台會輸出connect success
,代表已經成功與服務端連接上。
測試發送消息
在頁面輸入框內輸入任意信息,服務端cmd
終端將會打印信息,代表服務端收到信息,然后服務端控制台將會輸出‘收到’+發送的信息。
至此,我們的測試完成。
溫馨提示:對程序修改后需要重新啟動服務端才能生效
以上只是簡單的利用ThinkPHP5.1
的框架測試PHPSocket.IO
通訊。
源代碼地址:https://github.com/hsu1943/thinksocketio
供大家參考。
update (代碼以Github為准)
- 2019/01/22:
Github
項目代碼已經更新,加入了用戶唯一表示記錄以及向指定用戶推送消息。詳情看:ThinkPHP 5.1+PHPSocket.IO實現websocket搭建聊天室+私聊 - 2019-06-19 增加在線人數統計,在線用戶列表,修改昵稱,添加系統主動推送接口(廣播或私信);