FAQ > 金融建模 > 第三方交互 > Python

Q:python交互如何自动切换到有效的天软服务地址?    

简述
为确保用户能稳定地访问天软服务器,天软提供多条网络链路连接天软服务器,有包括电信,移动,网通等三大主流网络供应商的线路。
当其中一条线路发生故障时,用户可切换其它线路进行使用,不影响用户正常工作。
多种交互工具中,天软提供的客户端登陆方式中,会主动进行轮动选择较优的线路连接服务器,不需要用户主动去切换。
而python等其它第三方交互在登陆时没有这个轮动功能,默认情况下,使用的是用户本机DSN分析出来的线路。
所以,当刚好这条线路发生故障时,这类用户就容易出现第三方登陆失败,而客户端登陆正常的现象,这时,就需要用户主动对该服务器线路进行切换。

在第三方交互中,为解决链路故障问题,下面以python交互为类,模仿轮动过程,实现程序登陆时,自动切换到正常链路的操作,供该类用户进行参考。
  • A:在使用第三方交互接口连接天软服务器时,当登陆连接不上服务器,且报服务器没有答复或没有反应的错误时,可轮动所有天软服务器地址进行连接,保证正常登陆后再继续执行。
    天软服务器地址:FAQ:Q:天软服务器地址

    一般登陆时,报错如下,则有可能是线路故障原因引起,此时可以选择其它地址进行连接:


    下面主要以python的两种常用交互方式(TSLPy与pyTSL)进行举例实现,用户可根据个人需求进行参考。

    TSLPy接口实现多条线路的轮动
    接口使用详情:FAQ:2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
    通过连接服务器登陆
    python代码:
    import sys
    sys.path.append("C:\\Program Files\\Tinysoft\\Analyse.NET")
    import TSLPy3 as ts

    host="tsl.tinysoft.com.cn"#地址
    port = 443 # 端口
    user = "user" # 天软平台账户
    password = "password" # 天软账号密码

    lj=ts.ConnectServer(host,port)#连接服务器
    if lj != 0 :
      # 轮动天软服务器地址
      servers = ["unicom.tinysoft.com.cn", "telecom.tinysoft.com.cn", "mobile.tinysoft.com.cn", "wh.tinysoft.com.cn"]
      for server in servers :
        connect=ts.ConnectServer(server,port)
        if connect == 0:
          print("当前服务器IP:",server)
          break


    dl = ts.LoginServer(user, password)#登陆账号
    if dl[0]==0 :
      print("登陆成功")
      # 执行交互代码
      tsstr = '''return 1;'''
      data = ts.RemoteExecute(tsstr, {})
      print(data)
      
      ts.Disconnect() # 断开登陆
    else :
      print("登陆失败",dl[0],dl[1].decode("gbk"))

    执行结果:


    通过配置文件登陆
    使用前需要在配置文件中新增所有天软服务器地址的配置信息
    python代码:
    import sys
    sys.path.append("C:\\Program Files\\Tinysoft\\Analyse.NET")
    import TSLPy3 as ts

    dl=ts.DefaultConnectAndLogin("tsl")#登陆天软服务器
    if dl[0]>-3 or dl[0]<-13:
      # 配置文件中配置多个天软服务器
      servers = ["unicom", "telecom", "mobile", "wh"]
      for server in servers :
        dl=ts.DefaultConnectAndLogin(server)
        if dl[0] == 0 or (dl[0]<=-3 and dl[0]>=-13):
          print("当前服务器:",server)
          break

          
    if dl[0]==0 :
      print("登陆成功")
      # 执行交互代码
      tsstr = '''return 1;'''
      data = ts.RemoteExecute(tsstr, {})
      print(data)

      ts.Disconnect() # 断开登陆
    else :
      print("登陆失败",dl[0],dl[1].decode("gbk"))

    执行结果:


    pyTSL接口实现多条线路的轮动
    接口使用详情:FAQ:天软pyTSL接口
    配置
    1、下载已封装好的tslpyTSL.py文件,附件:附件:tslpyTSL.py
    2、打开tslpyTSL.py文件,在对应的位置填入用户的天软账号、密码
    分别对应变量:user、password,位置如下:

    设置好之后,保存即可。

    tslpyTSL模块说明
    根据已有的方法封装登陆天软服务器模型:
    1.tsClient(ip):指定ip地址正常服务时正常登录,否则轮动所有的天软服务器。
    登陆后其它方法的使用模型与pyTSL接口一致。

    使用范例
    python代码:
    import tslpyTSL

    c=tslpyTSL.tsClient("tsl.tinysoft.com.cn")#指定服务器
    dl=c.login()
    if dl == 1 :
      tsstr = '''return "登陆指定服务器";'''
      print(c.exec(tsstr).value())
      c.logout()
    else:
      print("登陆失败 ","异常信息",dl,c.last_error())


    d=tslpyTSL.tsClient(-1)#自动轮动登陆服务器
    dl=d.login()
    if dl == 1 :
      tsstr = '''return "自动轮动登陆服务器";'''
      print(d.exec(tsstr).value())
      d.logout()
    else:
      print("登陆失败 ","异常信息",dl,d.last_error())
    执行结果: