swoole消息推送php,swoole異步任務

本文目錄一覽:

消息服務器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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CTMX的頭像CTMX
上一篇 2024-10-04 00:13
下一篇 2024-10-04 00:13

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • RabbitMQ和Yii2的消息隊列應用

    本文將探討RabbitMQ和Yii2之間的消息隊列應用。從概念、安裝和配置、使用實例等多個方面詳細講解,幫助讀者了解和掌握RabbitMQ和Yii2的消息隊列應用。 一、Rabbi…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Saturn 定時任務用法介紹

    本文將從以下幾個方面對Saturn定時任務進行詳細的闡述: 一、Saturn 定時任務簡介 Saturn是一個分布式任務調度系統,支持在線添加、修改定時任務,支持多種任務類型,如J…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • ROS線程發布消息異常解決方法

    針對ROS線程發布消息異常問題,我們可以從以下幾個方面進行分析和解決。 一、檢查ROS代碼是否正確 首先,我們需要檢查ROS代碼是否正確。可能會出現的問題包括: 是否正確初始化RO…

    編程 2025-04-28
  • 使用Python發送微信消息給別人

    問題:如何使用Python發送微信消息給別人? 一、配置微信開發者平台 首先,要想發送微信消息,需要在微信開發者平台中進行配置,來獲取對應的授權信息。具體步驟如下: 1、登錄微信公…

    編程 2025-04-28
  • 如何在dolphinscheduler中運行chunjun任務實例

    本文將從多個方面對dolphinscheduler運行chunjun任務實例進行詳細的闡述,包括準備工作、chunjun任務配置、運行結果等方面。 一、準備工作 在運行chunju…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論