tcp服务提供者(python)

概述

    此示例演示如何使用python_sdk编写tcp服务提供程序,python_sdk提供简单易用的接口给客户调用,与服务端通信/响应通告等细节sdk内部都完现了,用户无需花时间在这些细节上,而是专注于自身业务逻辑。

示例源文件python_sdk/sample_tcp_prvd.py
示例准备:先运行服务端cppcloud_serv,记下ip地址和端口。

示例代码

    如下给出的是关键语句伪代码。

import cppcloud
from cppcloud.tcpprovider import TcpProviderBase

class PrvdTcp(TcpProviderBase):
    #regname = 'TestPrvd' # 不设置,默认用cloudapp.svrname
    #host = '192.168.1.101'  # 不设置,默认自动检测
    #port = 3744 # 不设置,默认用随机端口


    # 默认消息消息处理方法()
    # overload
    def onRequest(self):
        import threading
        print((".. do job ..", self.reqcmdid, self.reqseqid, self.reqbody))
        respsor = self.response_async()
        self.seqid = 0
        self.reqcmdid = 0

        if not getattr(self, 'timer', None): # 令首个请求延迟返回(模拟一些耗时业务请求)
            self.timer = threading.Timer(2, self.threadTest, (respsor,))
            self.timer.setDaemon(True)
            self.timer.start()
        else:
            respsor("hi, input=" + self.reqbody)

    def threadTest(self, respsor):
        print("a-resp: hi, input=inthread send")
        respsor("hi, input=inthread send")


if __name__ == "__main__":
    if not cppcloud.init('vpc2', 4800, svrname="TestPrvd"):
        print('CloudApp start fail, exit')
        exit(-1)

    PrvdTcp.Start() # 服务启动
    input('press any key to exit\n')
    PrvdTcp.Shutdown()

    cppcloud.uninit()

说明

  1. tcp服务类PrvdTcp继承TcpProviderBase,请求到达时由默认消息消息处理方法onRequest()处理;
  2. 请求携带的参数信息在实例self成员中,包括self.reqcmdid, self.reqseqid, self.reqbody等;
  3. 服务提供者相身信息可以在PrvdTcp的类属性中设置,比如上面注释的regname、host等;
  4. 响应可以是同步(self.response())或者异步(self.response_async())。

注意

    源代码sample_tcp_prvd.py里加入的threadTest线程是为了演示有些耗时的业务场景,可以异步响应消息,实现流水线式处理

启动运行

先把示例代码中的vpc2修改为你当前的cppcloud_serv的服务地址; python sample_tcp_prvd.py

演示结果

程序启动 prvd_png

服务处理,要结果调用者(消费者)才看得到结果 prvd2_png