python 編寫遊戲測試機器人客戶端 (二)
遊戲測試機器人搭建 - Send Actor
Send Actor
Send Actor初始化
class SendActor(pykka.ThreadingActor):
'''
傳送訊息給服務端
'''
def __init__(self, player=None, sock=None):
super(SendActor, self).__init__()
self.player = player
self.socket = sock
self.wpe = 1
- 引數傳遞及呼叫,在PlayerActor裡,直接看圖
- 在PlayerActor的on_receive裡建立socket/websocket連線,我的專案是用websocket,引數傳PlayerActor的例項和socket
啟動Send Actor
def on_start(self):
self.on_heart()
- 跟 Player Actor 一樣,要先呼叫這裡,我在這裡啟動了心跳方法,可以根據自己的專案型別決定心跳的啟動方式或幹掉心跳
心跳包
def on_heart(self):
self.player.sys_count += 1
if self.player.sys_count >= 590:
self.actor_ref.tell({MSG_PROTO: {'cmd': 'hall_heart'}})
self.player.sys_count = 0
# 心跳這裡時間會阻塞100毫秒
self.actor_ref.tell({MSG_HEART:{'msg':'loop'}})
time.sleep(0.1)
- MSG_PROTO:訊息型別,傳送協議都是這個型別,可自己自定義
- 這裡我是60秒跟服務端發一次心跳包
- {'cmd': 'hall_heart'} : 這是心跳協議,我這裡用的Json格式的協議,根據自己專案的協議型別更換,如protobuf,sproto,自定義協議,關於協議轉換(序列化和反序列化)這裡就不展開討論,後面再寫
- self.actor_ref.tell({MSG_HEART:{'msg':'loop'}}) : 這一行的程式碼作用是重複給SendActor 自己傳送訊息,在SendActor的on_receive會接收到訊息
序列化和傳送資料
def on_receive(self, msg):
'''
msg[MSG_PROTO] 打包好的協議資料
傳送包有引數的為元組型別,沒有引數則直接傳送協議
'''
if MSG_PROTO in msg.keys() and msg[MSG_PROTO]:
proto_id, proto_bin = msg[MSG_PROTO]['cmd'],msg[MSG_PROTO]
proto_header = {
'cmd': proto_id,
'sessionId': self.wpe,
'ts':int(time.time()*1000),
}
proto_header.update(proto_bin)
buff = json.dumps(proto_header)
self.socket.send(buff)
elif msg[MSG_HEART]:
self.on_heart()
else:
print('發過來空資料了')
if self.wpe is XXX:
self.wpe = 0
else:
self.wpe = self.wpe + 1
- msg: 這裡接收兩個資料,協議ID和序列化後的協議內容
- 協議頭:proto_header,協議內容和協議頭進行合併,再傳送給服務端
- 前面寫的心跳方法在這裡呼叫
- wpe 我這裡是指向sessionID,有些專案需要做序列校驗
停止SendActor
def on_stop(self):
print('SendActor stop')
- pykka actor 自帶的方法,集中在PlayerActor的on_stop裡呼叫
又是log收集
@GetLog(level='error')
def on_failure(self, exception_type, exception_value, traceback):
logging.error('SendActor fail => ', exception_type, exception_value, tb.print_tb(traceback))
- log模組的使用可以參考"官方說明"或者自行百度查詢,案例很多
接下來的是 python編寫遊戲測試機器人客戶端(三),跟SendActor區別在於反序列化服務端的資料
相關文章
- python 編寫遊戲測試機器人客戶端 (一)Python遊戲機器人客戶端
- python 編寫遊戲測試機器人客戶端 (三)Python遊戲機器人客戶端
- 測試平臺系列(90) 編寫oss客戶端客戶端
- 無線iphone客戶端測試白皮書(二)iPhone客戶端
- grpc套路客戶端編寫RPC客戶端
- JavaScript客戶端測試之旅JavaScript客戶端
- Swift編寫自己的API客戶端SwiftAPI客戶端
- NAP客戶端計算機隔離測試之三客戶端計算機
- PC客戶端安全測試服務客戶端
- 客戶端釋出日誌測試客戶端
- 初識Modbus TCP/IP-------------C#編寫Modbus TCP客戶端程式(二)TCPC#客戶端
- 無線1x客戶端編寫概要客戶端
- 使用測試客戶端「玩轉」MQTT 5.0客戶端MQQT
- [測試平臺] 全流程客戶端測試質量保障客戶端
- 編寫Enterprise bean的客戶端(下) (轉)Bean客戶端
- 用VB編寫OPC客戶端訪問WINCC (轉)客戶端
- 使用python/casperjs編寫終極爬蟲-客戶端App的抓取PythonJS爬蟲客戶端APP
- 無線iphone客戶端測試白皮書(三)iPhone客戶端
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- 手把手教你編寫入門級redis客戶端Redis客戶端
- 通過命令列在Python中測試以太坊RPC客戶端命令列PythonRPC客戶端
- 通過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 透過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 客戶端效能測試利器PerfDog嚐鮮體驗客戶端
- 測試平臺系列(80) 封裝Redis客戶端封裝Redis客戶端
- 如何進行 iPhone 客戶端的軟體測試iPhone客戶端
- Thrift安裝與伺服器、客戶端的編寫執行演示(windows版本)伺服器客戶端Windows
- 客戶端Ping伺服器工具[Python]客戶端伺服器Python
- 如何編寫一個前端框架之七-客戶端路由(譯)前端框架客戶端路由
- Zookeeper C客戶端庫編譯客戶端編譯
- !請教:java NIO編寫服務端,C++編寫客戶端,二者採用自定義資料包資料通訊Java服務端C++客戶端
- Python socket的客戶端Python客戶端
- python遊戲開發實戰:網路遊戲Demo(客戶端)Python遊戲開發客戶端
- win/mac 端有哪些客戶端自動化測試的想法呢Mac客戶端
- [jaeger] 二、客戶端使用 (Java版本)客戶端Java
- WebSocket簡單使用(二)-客戶端Web客戶端
- RMAN之客戶端互動(二)客戶端
- Java OAuth 2.0 客戶端程式設計(二): 客戶端憑據授權JavaOAuth客戶端程式設計