Storm之——實現井字棋遊戲(人工智慧)
阿新 • • 發佈:2019-01-29
一、下載原始碼
二、本地部署
這裡,我們直接執行Topology可實現本地部署。
執行ScoringTopology的結果如下:
3597 [main] INFO com.lyz.storm.topology.ScoringTopology - SIMULATED LEAF NODE : [ --------- |O||X||O| --------- |X||X||O| --------- |O||X||X| --------- ] w/ state [GAME [OXOXXOOXX]: player(O) history [ , X , X O , X O X, OX O X, XOX O X, XOX OO X, XOXXOO X,OXOXXOO X,]]
執行DrpcTopology的結果如下:
執行RecursiveTopology的結果如下:3922 [main] INFO com.lyz.storm.topology.DrpcTopology - Determing best move for O on: --------- |X||O|| | --------- | ||O|| | --------- | || ||X| --------- 5419 [main] INFO com.lyz.storm.topology.DrpcTopology - RECEIVED RESPONSE [[[ --------- |X||O|| | --------- | ||O|| | --------- | ||O||X| --------- [10000]]]]
12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOO XO]: player(O) history [ , O , XO , XO O, XXO O, XXOO O, XXOO XO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOOX O]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXO OX O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOOO XO]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXO O XO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXOX O O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXOX O O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO XO O]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXO XO O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXO XOOO]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXO XO O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO OXO]: player(O) history [ , O , XO , XO O, XXO O, XXO O O, XXO OXO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O) history [ , O , XO , XO O, XXO O, XXO OO, XXOX OO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXO XOOO]: player(O) history [ , O , XO , XO O, XXO O, XXO OO, XXO X OO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O) history [ , O , XO , XO O, XOX O,O XOX O,OXXOX O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O) history [ , O , XO , XO O, XOX O,O XOX O,O XOXX O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOX OXO]: player(O) history [ , O , XO , XO O, XOX O,O XOX O,O XOX XO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [X XOX OOO]: player(O) history [ , O , XO , XO O, XOX O, XOX O O,X XOX O O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOX O O]: player(O) history [ , O , XO , XO O, XOX O, XOX O O, XXOX O O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O) history [ , O , XO , XO O, XOX O, XOX O O, XXOX O O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O) history [ , O , XO , XO O, XOX O, XOX O O, XOXXO O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XOXXOOO]: player(O) history [ , O , XO , XO O, XOX O, XOX O O, XOXXO O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOX OXO]: player(O) history [ , O , XO , XO O, XOX O, XOX O O, XOX OXO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [X XOX OOO]: player(O) history [ , O , XO , XO O, XOX O, XOX OO,X XOX OO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XXOX OOO]: player(O) history [ , O , XO , XO O, XOX O, XOX OO, XXOX OO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [ XOXXOOO]: player(O) history [ , O , XO , XO O, XOX O, XOX OO, XOXX OO,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXOOX O]: player(O) history [ , O , XO , XO O, XO X O,O XO X O,OXXO X O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [OXXO XO O]: player(O) history [ , O , XO , XO O, XO X O,O XO X O,OXXO X O,]] 12500 [Thread-12-b-0] INFO com.lyz.storm.operators.isEndGame - END GAME [GAME [O XOXXO O]: player(O) history [ , O , XO , XO O, XO X O,O XO X O,O XOXX O,]]
三、遠端部署
為了在遠端呼叫topology,需要啟動一個SRPC伺服器,啟動這個服務和啟動Storm中其他服務是一樣的方法,用drpc作為引數執行storm指令碼:
bin/storm drpc
Storm叢集會連線到DRPC伺服器上接收命令。我們需要通過配置告訴Storm叢集DRPC伺服器的位置。在storm.yaml檔案中如下配置:drpc.servers:
- 'drpchost1 '
- 'drpchost2 '
當配置了服務的伺服器啟動後,topology的提交方式和其他topology一樣,DRPC客戶端可以被其他任何需要大規模分散式非同步處理的Java應用程式來使用。為了從本地客戶端切換到遠端,唯一需要改變的是DRPC客戶端的命令。需要使用下面的程式碼來替換DrpcTopology類中的DRPC客戶端://遠端部署。host和port與storm.yaml檔案中的配置一致
DRPCClient client = new DRPCClient("drpchost1", 3772);
引數指定了DRPC服務的伺服器和埠,需要和YAML檔案中的配置一致。