python编写游戏测试机器人客户端(二)

本文介绍了Python编写的游戏测试机器人客户端中的Send Actor部分,包括初始化、启动、心跳包发送、序列化和数据发送、以及停止和日志收集。Send Actor通过WebSocket连接与服务端交互,每60秒发送心跳包以保持连接。文章还提到,后续内容将涉及服务端数据的反序列化。
摘要由CSDN通过智能技术生成

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里,直接看图
    sendActor_args
  • 在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区别在于反序列化服务端的数据

最后的最后,各位的关注、点赞、收藏、碎银子打赏是对我最大的支持,谢谢大家!
需要源码的小伙伴关注微信公众号ID:gameTesterGz
或扫描二维码关注回复机器人框架即可
微信二维码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏测试-AJian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值