本文目錄一覽:
- 1、消息服務器websocket高並發分布式swoole 架構思路
- 2、請教各位用過PHP+Swoole實現的PHPWebIM的大神們,這個東西使用啊!
- 3、php 微信模板消息 5000人的推送
- 4、Swoole和PHP到底什麼關係
- 5、PHP怎麼實現主動向客戶端發送信息
消息服務器websocket高並發分布式swoole 架構思路
消息服務器使用socket,為避免服務器過載,單台只允許500個socket連接,當一台不夠的時候,擴充消息服務器是必然,問題來了,如何讓鏈接在不同消息服務器上的用戶可以實現消息發送呢?
要實現消息互通就必須要讓這些消息服務器本身能互通,想了兩個方式,一種是消息服務器之間交叉鏈接,另一種是增加一個特殊的消息服務器,這個消息服務器不對外開放,只負責消息轉發和推送。
下列測試不考慮防火牆等。僅測試可行性和效率。
消息服務器
轉發服務器
公共緩存
軟件環境
client1 可向 client2 或者其他 client 發送消息,並接收其他 client 發送的消息.
Redis 中保存 client 連接的信息,給每個用戶分配唯一的 key ,包括鏈接的哪台服務器,轉發服務器定時檢測消息服務器,如消息服務器掛掉,由轉發服務器清理掉Redis已經掛掉的所有鏈接。
1. Client1 給 Client2 發送一條消息
2. Socket1 接收到消息,根據 key從Redis 取出 Client2 的連接信息,連接在本機,直接推送給 Client2 ,流程結束。
3.如果連接不在本機,把消息推送到轉發服務器,由轉發服務器把該消息推送給連接所在消息服務器,消息服務器接收消息,推送給 Client2 。
服務器上創建一個server.php,內容如下:
上只需把ip變更一下即可。192.168.0.201變更為192.168.0.202.
在轉發服務器上建立腳本proxy.php,內容如下:
注意開啟順序
1.開啟轉發服務器php proxy.php
2.分別開啟socket服務器php server.php
可以在轉發服務器上看到兩個消息服務器已經連接
3.開始測試,分別打開兩個telnet,連接兩個消息服務器,發送消息測試:
登陸
基於強大的 swoole 擴展,讓php高效的實現這些成為可能,目前消息服務器到轉發服務器是長連接,轉發服務器到消息服務器是短連接,存在性能瓶頸,也浪費了連接資源。下一步改造成長連接,消息服務器的client使用異步。
請教各位用過PHP+Swoole實現的PHPWebIM的大神們,這個東西使用啊!
全異步非阻塞Server,可以同時支持數百萬TCP連接在線
基於websocket+flash_websocket支持所有瀏覽器/客戶端/移動端
支持單聊/群聊/組聊等功能
支持永久保存聊天記錄
基於Server PUSH的即時內容更新,登錄/登出/狀態變更/消息等會內容即時更新
支持發送連接/圖片/語音/視頻/文件(開發中)
支持Web端直接管理所有在線用戶和群組(開發中)
php 微信模板消息 5000人的推送
1、php+redis 消息隊列
2、swoole異步執行
想玩並發的話,php 的話除了 pcntl_fork 多個進程跑腳本,本身有批處理的模塊,可以用 curl_multi_* 批量發送
Swoole和PHP到底什麼關係
首先說一下對swoole的理解:披着PHP外衣的C程序。很多PHPer朋友看到swoole提供的強大功能、外界對其的崇拜便躍躍欲試的安裝、調 試其demo、編寫新功能,然後興奮的奔走相告。
沒過幾天當你按照自己的理解繼續用swoole時,發現代碼並沒有按照自己的預期運行,然後開始破口大 罵,什麼破東西呀,代碼跟demo基本一樣,為啥運行不通呢?什麼狗屁work、task、共享內存、ipcs、異步,各種問題湧現,然後迅速去查官方文 檔,發現文檔中竟然對這些並沒有提及,只是簡單的介紹怎麼使用,此時幾乎對swoole喪失希望。
PHP怎麼實現主動向客戶端發送信息
實現消息推送首先需要瀏覽器支持 websocket 協議,這是前提,然後再通過瀏覽器發起websocket 請求到服務器,建立一條連接,這是服務器端就可以通過這條連接向瀏覽器推送消息了。
服務器端對websocket的支持可以通過一些第三方庫來實現,供參考
hoa/websocket網頁鏈接
swoole 庫
原創文章,作者:CTMX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135527.html