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客戶端客戶端
- grpc套路客戶端編寫RPC客戶端
- python遊戲開發實戰:網路遊戲Demo(客戶端)Python遊戲開發客戶端
- 無線1x客戶端編寫概要客戶端
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- 使用測試客戶端「玩轉」MQTT 5.0客戶端MQQT
- 通過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 通過命令列在Python中測試以太坊RPC客戶端命令列PythonRPC客戶端
- 透過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- [測試平臺] 全流程客戶端測試質量保障客戶端
- 如何建立一個Java遊戲客戶端Java遊戲客戶端
- Thrift安裝與伺服器、客戶端的編寫執行演示(windows版本)伺服器客戶端Windows
- Python socket的客戶端Python客戶端
- 如何編寫一個前端框架之七-客戶端路由(譯)前端框架客戶端路由
- 關於如何編寫好金融科技客戶端SDK的思考客戶端
- 客戶端效能測試利器PerfDog嚐鮮體驗客戶端
- 測試平臺系列(80) 封裝Redis客戶端封裝Redis客戶端
- 如何用python編寫猜拳小遊戲?Python遊戲
- Zookeeper C客戶端庫編譯客戶端編譯
- [jaeger] 二、客戶端使用 (Java版本)客戶端Java
- RMAN之客戶端互動(二)客戶端
- 服務端c100k連線測試和客戶端65535測試驗證2服務端客戶端
- Skywalking PHP客戶端編譯安裝PHP客戶端編譯
- C#版Nebula客戶端編譯C#客戶端編譯
- 自己動手寫個 Android客戶端Android客戶端
- OrzClick: 國慶寫個 ClickHouse 客戶端客戶端
- Flutter寫的部落格園客戶端Flutter客戶端
- win/mac 端有哪些客戶端自動化測試的想法呢Mac客戶端
- 客戶端安裝虛擬機器問題解答?客戶端虛擬機
- 從零開始仿寫一個BiliBili客戶端之編譯ijkplayer客戶端編譯
- 用 socket 代理監聽 h5 遊戲的 websocket 請求,轉發伺服器的二進位制給客戶端,看控制檯列印客戶端是收到了請求了,但是客戶端後續列印載入遊戲配置都超時了導致載入卡住進不去遊戲了H5遊戲Web伺服器客戶端
- python建立tcp服務端和客戶端PythonTCP服務端客戶端
- RPA機器人如何精準瞭解客戶需求機器人
- Python MQTT客戶端 paho-mqttPythonMQQT客戶端
- 遊戲客戶怎麼選擇伺服器呢遊戲伺服器
- 使用Python編寫一個滲透測試探測工具Python