基於SWOOLE的分布式SOCKET訊息伺服器架構

2022-05-18 20:04:48 字數 541 閱讀 3408

訊息伺服器使用socket,為避免伺服器過載,單台只允許500個socket連線,當一台不夠的時候,擴充訊息伺服器是必然,問題來了,如何讓鏈結在不同訊息伺服器上的使用者可以實現訊息傳送呢?

要實現訊息互通就必須要讓這些訊息伺服器本身能互通,想了兩個方式,一種是訊息伺服器之間交叉鏈結,另一種是增加乙個特殊的訊息伺服器,這個訊息伺服器不對外開放,只負責訊息**和推送。

下列測試不考慮防火牆等。僅測試可行性和效率。

注意開啟順序

1.開啟**伺服器php proxy.php

2.分別開啟socket伺服器php server.php

可以在**伺服器上看到兩個訊息伺服器已經連線

3.開始測試,分別開啟兩個telnet,連線兩個訊息伺服器,傳送訊息測試:

登陸傳送訊息測試

訊息成功接收。

基於強大的swoole擴充套件,讓php高效的實現這些成為可能,目前訊息伺服器到**伺服器是長連線,**伺服器到訊息伺服器是短連線,存在效能瓶頸,也浪費了連線資源。下一步改造成長連線,訊息伺服器的client使用非同步。

基於redis的分布式鎖

public class redislock 加鎖 取到鎖加鎖,並返回值用於解鎖 取不到鎖則立即返回 1 param millitimeout 最長鎖定時間,超時後自動刪除鎖,避免死鎖 return public synchronized long lock long millitimeout lo...

基於twemproxy的redis分布式應用

根據以往的測試結論,單個redis的例項的記憶體總量最好控制在8g以內 最大不能超過20g 而實際上應用對redis的記憶體的需求可能會遠遠大於8g,因此需要乙個保持redis server效能不下降,但可以有效擴充redis server的容量的方案。twemproxy是乙個恰當的選擇。b 簡介 ...

基於 Redis 的分布式鎖

分布式鎖在分布式應用中應用廣泛,想要搞懂乙個新事物首先得了解它的由來,這樣才能更加的理解甚至可以舉一反三。首先談到分布式鎖自然也就聯想到分布式應用。在我們將應用拆分為分布式應用之前的單機系統中,對一些併發場景讀取公共資源時如扣庫存,賣車票之類的需求可以簡單的使用同步或者是加鎖就可以實現。但是應用分布...