Rumah php教程 php手册 用 PHP 监听 ZooKeeper

用 PHP 监听 ZooKeeper

Jun 06, 2016 pm 07:38 PM
g https php zookeeper kod pantau

代码出处:https://git.oschina.net/afrxprojs/xgame-code_server ZooKeeper ?php//// 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面,// 在命令行中可以执行以下操作 ://// 新建 Kev/Value// $ create /xgame 0// $ create /xgame/S00 0// $ create /xg

代码出处:https://git.oschina.net/afrxprojs/xgame-code_server ZooKeeper

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

<?php

//

// 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面,

// 在命令行中可以执行以下操作 :

//

// 新建 Kev/Value

// $ create /xgame 0

// $ create /xgame/S00 0

// $ create /xgame/S00/conf/maintenanceTimeStr 0

// $ create /xgame/S00/conf/whiteList 0

// $ create /xgame/S00/conf/blackList 0

//

// 之后执行 PHP 命令启动监听服务 :

//

// $ php ZkServ.php

//

// 注意 : 请事先确认是否已经安装 php-zookeeper 扩展?

// 回到 ZooKeeper 界面, 尝试修改维护时间字符串 :

//

// $ set /xgame/S00/conf/maintenanceTimeStr [20150101000000,20151231235959]

//

// @import

require_once("MyLog.php");

require_once("etc/AppName.php");

require_once("etc/ServerName.php");

require_once("etc/ZooKeeper.php");

 

/**

 * ZooKeeper 服务

 *

 * @auth jinhaijiang

 * @since 2015/6/28

 * @see https://git.oschina.net/afrxprojs/xgame-code_server

 *

 */

class ZkServ extends Zookeeper {

    /**

     * 应用名称

     *

     * @var String

     *

     */

    public $_appName;

 

    /**

     * 服务器名称

     *

     * @var String

     *

     */

    public $_serverName;

 

    /**

     * ZooKeeper 路径字典

     *

     * @var Array

     *

     */

    private $_zkPathMap;

 

    /**

     * 启动服务

     *

     */

    public function startUp() {

        // 获取应用名称和服务器名称

        $appName = $this->_appName;

        $serverName = $this->_serverName;

 

        // 初始化路径字典

        $this->_zkPathMap = array(

            "/${appName}/${serverName}/conf/maintenanceTimeStr" => "updateMaintenanceTime",

            "/${appName}/${serverName}/conf/whiteList" => "updateWhiteList",

            "/${appName}/${serverName}/conf/blackList" => "updateBlackList",

        );

 

        foreach ($this->_zkPathMap as $key => $val) {

            // 输出调试日志

            MyLog::LOG()->debug("准备监听 : $key");

            // 设置监听

            $this->get($key, array($this, "watch"));

        }

    }

 

    /**

     * 监听数据变化

     *

     * @param $eventType

     * @param $eventState

     * @param $eventKey

     *

     */

    public function watch($eventType, $eventState, $eventKey) {

        // 记录日志信息

        MyLog::LOG()->info("接到数据");

        // 输出调试信息

        MyLog::LOG()->debug("eventType = ${eventType}, eventState = ${eventState}, eventKey = ${eventKey}");

 

        // 获取数据

        $data = $this->get($eventKey);

        // 获取函数引用并调用

        $funcRef = $this->_zkPathMap[$eventKey];

        $this->$funcRef($data);

 

        // 循环监听

        $this->get($eventKey, array($this, "watch"));

    }

 

    /**

     * 更新停服维护时间,

     * 注意这是一个回调函数! 会在 watch 函数中被间接调用

     *

     * @param String $value

     * @return void

     *

     */

    private function updateMaintenanceTime($value) {

        // 记录日志信息

        MyLog::LOG()->info("维护时间 = $value");

        // 获取 JSON 数组

        $jsonArr = json_decode($value);

 

        $startTimeStr = $jsonArr[0];

        $endTimeStr = $jsonArr[1];

 

        $text = <<< __EOF

<?php

\$GLOBALS["MAINTENANCE_START_TIME"] = $startTimeStr;

\$GLOBALS["MAINTENANCE_END_TIME"] = $endTimeStr;

 

__EOF;

 

        // 目标文件

        $targetFile = dirname(__FILE__) . "/etc/MaintenanceTime.php";

        // 写出目标文件

        self::writeToFile($targetFile, $text);

    }

 

    /**

     * 更新白名单

     * 注意这是一个回调函数! 会在 watch 函数中被间接调用

     *

     * @param String $value

     * @return void

     *

     */

    private function updateWhiteList($value) {

        // 记录日志信息

        MyLog::LOG()->info("白名单 = ${value}");

        // 获取 JSON 数组

        $jsonArr = json_decode($value);

 

        $text = <<< __EOF

<?php

\$GLOBALS["WHITE_LIST"] = array(

__EOF;

 

        foreach ($jsonArr as $json) {

            // 获取平台 UUId

            $platformUUId = $json;

            // 添加到文本

            $text .= "\n\t\"${platformUUId}\" => 1, ";

        }

 

        $text .= "\n);";

 

        // 目标文件

        $targetFile = dirname(__FILE__) . "/etc/WhiteList.php";

        // 写出目标文件

        self::writeToFile($targetFile, $text);

    }

 

    /**

     * 更新黑名单

     * 注意这是一个回调函数! 会在 watch 函数中被间接调用

     *

     * @param String $value

     * @return void

     *

     */

    private function updateBlackList($value) {

        // 记录日志信息

        MyLog::LOG()->info("白名单 = ${value}");

        // 获取 JSON 数组

        $jsonArr = json_decode($value);

 

        $text = <<< __EOF

<?php

\$GLOBALS["BLACK_LIST"] = array(

__EOF;

 

        foreach ($jsonArr as $json) {

            // 获取平台 UUId

            $platformUUId = $json;

            // 添加到文本

            $text .= "\n\t\"${platformUUId}\" => 1, ";

        }

 

        $text .= "\n);";

 

        // 目标文件

        $targetFile = dirname(__FILE__) . "/etc/BlackList.php";

        // 写出目标文件

        self::writeToFile($targetFile, $text);

    }

 

    /**

     * 写出目标文件

     *

     * @param $targetFile 目标文件的完整路径

     * @param $text 文本内容

     * @return void

     *

     */

    private static function writeToFile($targetFile, $text) {

        // 打开文件

        $fp = fopen($targetFile, "w");

 

        if (!$fp) {

            // 如果打开文件失败,

            // 则直接退出!

            MyLog::LOG()->error("打开文件 ${targetFile} 失败!!");

            return;

        }

 

        // 写出文件内容

        $result = fwrite($fp, $text);

 

        if (!$result) {

            // 如果写出文件失败,

            // 则记录错误日志

            MyLog::LOG()->error(

                "写出文件 ${targetFile} 失败!!"

            );

        }

 

        fflush($fp);

        fclose($fp);

    }

}

 

// 获取服务器名称

$appName = $GLOBALS["APP_NAME"];

$serverName = $GLOBALS["SERVER_NAME"];

 

// ZooKeeper 配置

$zkHost = $GLOBALS["ZK_SERVER_HOST"];

$zkPort = $GLOBALS["ZK_SERVER_PORT"];

 

// 创建服务对象

$servObj = new ZkServ("${zkHost}:${zkPort}");

$servObj->_appName = $appName;

$servObj->_serverName = $serverName;

// 启动服务

$servObj->startUp();

 

while (true) {

    MyLog::LOG()->info("live");

    sleep(60);

}

Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Laman Web Rasmi Laman Web Laman Web Pintu Gerbang Exchange Laman Web Rasmi Laman Web Laman Web Pintu Gerbang Exchange Feb 19, 2025 pm 03:03 PM

Laman web rasmi Gate.io boleh diakses dengan mengklik pautan atau memasukkan URL dalam penyemak imbas. Adalah disyorkan untuk menambah URL ke penanda buku atau kegemaran untuk akses mudah. Sekiranya anda menghadapi masalah yang tidak dapat diakses, cuba membersihkan cache dan kuki penyemak imbas. Berhati -hati untuk mengelakkan phishing, laman web rasmi Gate.io tidak akan mengambil inisiatif untuk meminta maklumat peribadi. Di samping itu, Gate.io menyediakan aplikasi mudah alih yang boleh didapati melalui pembekal aplikasi

Peraturan dan Kelebihan Pengeluaran Bitmex Exchange Exchange Peraturan dan Kelebihan Pengeluaran Bitmex Exchange Exchange Feb 21, 2025 pm 10:48 PM

Keperluan pengeluaran mata wang Bitmex Exchange: Pengesahan dua langkah dan pengesahan identiti mesti diselesaikan. Jumlah minimum pengeluaran berbeza mengikut mata wang. Proses pengeluaran termasuk pembalakan ke dalam akaun, memasukkan alamat pengeluaran, memasukkan jumlah dan mengesahkan urus niaga. Kelebihan pengeluaran Bitmex termasuk pemprosesan cepat, yuran pengendalian yang rendah, sokongan mata wang berganda dan langkah keselamatan yang ketat. Walau bagaimanapun, ia juga menghadapi kekurangan seperti pengawasan yang tidak mencukupi, risiko serangan penggodam, sekatan terhadap pengeluaran dan pembekuan akaun.

See all articles