由于两台服务器都在腾讯云内网环境中,所以可以使用内网 IP(例如10.0.11.5 → 10.0.22.8)进行通信。这样使用内网 IP 通信,流量不经过公网,更安全且延迟更低。 一、服务端 signal_publisher.py 代码 (信号发布者 10.0.11.5)如下
# signal_publisher.pyimport socketimport timedef send_message(message, target_ip='10.0.22.8', target_port=5556): """向客户端发送信息""" try: # 创建 TCP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) # 连接到客户端 sock.connect((target_ip, target_port)) # 发送消息 sock.sendall(message.encode('utf-8')) print(f"消息已发送至 {target_ip}:{target_port}") sock.close() return True except Exception as e: print(f"发送失败: {e}") return False# 示例:发送消息if __name__ == "__main__": message = "Hello from server!" send_message(message)
二、客户端 signal_subscriber.py 代码(信号接收者 10.0.22.8)如下
# signal_subscriber.pyimport socketimport threadingdef start_server(host='0.0.0.0', port=5556): """启动服务端监听,接收信息""" # 创建 TCP socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 允许地址重用 server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 绑定地址和端口 server_socket.bind((host, port)) server_socket.listen(5) print(f"服务器已启动,监听 {host}:{port}") while True: # 等待连接 client_socket, client_address = server_socket.accept() print(f"收到来自 {client_address} 的连接") # 处理客户端请求 client_thread = threading.Thread( target=handle_client, args=(client_socket, client_address) ) client_thread.start()def handle_client(client_socket, client_address): """处理客户端连接""" try: # 接收数据 data = client_socket.recv(1024) if data: message = data.decode('utf-8') print(f"收到来自 {client_address} 的消息: {message}") # 发送确认回复 response = "Message received!" client_socket.sendall(response.encode('utf-8')) except Exception as e: print(f"处理客户端 {client_address} 时出错: {e}") finally: client_socket.close()# 启动服务器if __name__ == "__main__": start_server()
三、使用步骤说明
(一)在客户端(10.0.22.8)先运行客户端代码,启动监听,会在控制台打印输出如下信息:
服务器已启动, 监听 0.0.0.0:5556
(二)在服务端(10.0.11.5)运行服务端代码发送消息,会在控制台打印输出如下信息:
消息已发送至 10.0.22.8:5556
(三)客户端将实时显示接收到的消息,会在控制台打印输出如下信息:
服务器已启动, 监听 0.0.0.0:5556
收到来自('10.0.11.5',62305)的连接
收到来自('10.0.11.5',62305)的消息:Hello from server!
四、使用时的注意事项
(一)确保两台服务器的防火墙已放行 5556 端口。
(二)客户端需要先启动监听,服务端才能连接成功。
五、上述代码的使用场景
为了使得服务器端的信号算法的py代码不被破解盗用,就无需将信号算法的py代码部署在客户端。这样一来,服务器端根据自己需要保密的算法计算得到的订单信号,就可以通过程序高速发送给客户端的用户,当客户端用户的监控程序收到订单信息后就可以据此下达自己的订单完成交易,从而实现订单跟随并实现与服务器端一样的订单执行绩效。