关于python socket 的应用

184 阅读1分钟

最近在项目中需要实现一个功能,描述如下

通过管理系统点击启动与停止,调起项目中其他服务器的进程

# 客户端 封装函数在web端使用
from socket import *

HOST ='127.0.0.1' # 要启动的服务器ip
PORT = 12345      # 要启动的服务器端口
BUFFSIZE = 2048

ADDR = (HOST,PORT)
tctimeClient = socket(AF_INET,SOCK_STREAM)
tctimeClient.connect(ADDR)

data = '{"status":"start","task_id":10005}'
tctimeClient.send(data.encode())

data = tctimeClient.recv(BUFFSIZE).decode()
print(data)
tctimeClient.close()
# 服务端 需要在服务端保持进程状态

from socket import *
from time import ctime
import json,os
host = ''
port = 12345
buffsize = 2048
ADDR = (host,port)

tctime = socket(AF_INET,SOCK_STREAM)
tctime.bind(ADDR)
tctime.listen(3)

while True:
    print('Wait for connection ...')
    tctimeClient,addr = tctime.accept()
    print("Connection from :",addr)

    while True:
        data = tctimeClient.recv(buffsize).decode()
        if not data:
            break
        print(data,'已接收到客户端数据')
        data = json.loads(data)
        print(data,"已转成json")
        # 根据传入字符进行操作
        if data['status'] == 'start':
            result = os.popen('/usr/local/bin/python3.6 /app/quant_trade/test/test.py')
            print(result)
        tctimeClient.send(('[%s] %s' % (ctime(),data)).encode())
    tctimeClient.close()

防火墙需设置tcp端口开放,命令如下

  firewall-cmd --zone=public --add-port=12345/tcp --permanent
  firewall-cmd --reload