国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

PHP小蝌蚪游戲如何分布式部署

walkor

PHP小蝌蚪游戲也是可以分布式部署的。

分布式具有以下好處:

1、充分綜合利用資源,并行計算處理,高性能
2、避免單點故障造成的整個系統(tǒng)崩潰
3、提高系統(tǒng)整體承載能力
4、節(jié)約成本

關于第4點節(jié)約成本:拿小蝌蚪游戲來說,小蝌蚪由于游戲自身的特點對于CPU及內存要求不高,但是會比較消耗的服務器帶寬。小蝌蚪使用的服務器是兩臺阿里云的低配(單核+500M內存+[b]5M帶寬[/b])云主機價格為2x157¥/月,同樣的帶寬如果選用單臺(單核+500M內存+[b]10M帶寬[/b])服務器則需要1*657¥/月。所以選擇兩臺低配5M帶寬的服務器要比單臺劃算很多,后面如果還需要擴容則增加低配置服務器即可,所以支持分布式部署會節(jié)約不少成本,既拿很多低配機器撐起海量請求。

如何分布式部署小蝌蚪游戲呢?

首先了解下phpgame框架的進程模型
phpgame框架分為兩組進程gateway進程和worker進程(分別對應workers下的gateway.php和worker.php)

gateway進程只[b]負責網(wǎng)絡IO[/b],gateway進程是異步非阻塞的。gateway具體職責是
1、hold住客戶端連接
2、并將客戶端發(fā)來的數(shù)據(jù)轉發(fā)給worker進程處理
3、接收worker進程的處理結果并發(fā)送給客戶端

worker進程主要職責是處理用戶請求,具體如下
1、接收gateway進程socket轉發(fā)來的用戶請求
2、處理請求
3、如果有需要,通過socket向gateway發(fā)送結果數(shù)據(jù),gateway將結果數(shù)據(jù)再轉發(fā)給用戶

那么基于這種進程模型可以看到,gateway進程和worker進程是可以分開部署在不同機器上,這為我們分布式部署提供了便利。
所以當小蝌蚪帶寬資源不足時,可以簡單的增加gateway的機器,然后配置gateway進程將請求轉發(fā)給同一臺worker機器即可,這樣就實現(xiàn)了增加低配服務器提高接入服務器帶寬的目的,節(jié)約了成本又大大的增加了系統(tǒng)的承載能力。

具體如何配置:

1、首先前端配置,根據(jù)當前域名判斷是否使用多個接入機
applications/Todpole/Web/js/Setting.js

    var Settings = function() {
    // [b]如果是workerman.net phpgame.cn域名 則采用多個接入端隨機負載均衡[/b]
    var domain_arr = ['workerman.net', 'phpgame.cn','wtbis.cn', 'www.phpgame.cn'];
    if(0 >= $.inArray(document.domain, domain_arr)){
        this.socketServer = 'ws://'+domain_arr[Math.floor(Math.random() * domain_arr.length + 1)-1]+':8280';
    }
    else{
        // 運行在其它域名上
        this.socketServer = 'ws://'+document.domain+':8280';
    }
}

2、服務端配置
gateway接入機的配置 conf/conf.d/Gateway.conf
[code]
listen = tcp://0.0.0.0:8280
persistent_connection = 1
start_workers = 5
user = www-data
preread_length = 65535
;[b]本機內網(wǎng)ip[/b]
lan_ip = [b][i]本gateway接入機IP[/b][/i]
lan_port_start = 20000
;[b]worker進程的ip[/b]
game_worker[] = udp://[b][i]worker機器IP[/b][/i]:8183
[/code]

worker業(yè)務邏輯機器的配置
[code]
;確認worker監(jiān)聽的ip是0.0.0.0,最好是本機內網(wǎng)ip
listen = udp://[b][i]0.0.0.0[/b][/i]:8183
start_workers = 5
user = www-data
preread_length = 23
max_requests=1000
[/code]

3、替換原applications/Todpole/Store.php的內容如下:

class Store
{
    protected static $instance = null;

    public static function connect()
    {
        if(!self::$instance)
        {
            self::$instance = new Memcache;
            self::$instance->addServer('[b]memcache內網(wǎng)機器IP[/b]', 11211);
        }
        return self::$instance;
    }

    public static function set($key, $value, $ttl = 0)
    {
        if(self::connect())
        {
            return self::$instance->set($key, $value, $ttl);
        }
        return false;
    }

    public static function get($key)
    {
        if(self::connect())
        {
            return self::$instance->get($key);
        }
        return false;
    }

    public static function delete($key)
    {
        if(self::connect())
        {
            return self::$instance->delete($key);
        }
        return false;
    }

    public static function deleteAll()
    {
    }
}

4、安裝memcahced (debian系統(tǒng)運行命令 apt-get install memcached)
此時memcached可能已經(jīng)運行起來了,可以先kill掉,然后運行 /usr/bin/memcached -m 128 -p 11211 -u nobody -l 0.0.0.0 -D 啟動memcahced服務
給php安裝memcache擴展(debian系統(tǒng)運行命令 apt-get install php5-memcache)

好了,重啟服務,大功告成!

8814 3 1
3個評論

one

牛逼啊

  • 暫無評論
xtjsxtj

workerman的標準配置文件中gateway.conf好象沒有下面這幾個參數(shù)???是另外擴充的嗎?
;本機內網(wǎng)ip
lan_ip = 本gateway接入機IP
lan_port_start = 20000
;worker進程的ip
game_worker[] = udp://worker機器IP:8183

  • 暫無評論
walkor

這個是比較老的帖子了
現(xiàn)在分布式部署可以參考手冊
http://doc.workerman.net/advanced/distributed.html

  • 暫無評論
年代過于久遠,無法發(fā)表評論

walkor

163041
積分
0
獲贊數(shù)
0
粉絲數(shù)
2014-05-04 加入
??