最近在项目中需要实现一个功能,描述如下
通过管理系统点击启动与停止,调起项目中其他服务器的进程
# 客户端 封装函数在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