使用socket
库进行节点之间的通信。
服务器端代码(节点A)
import socket
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_address = ('localhost', 12345)
print('Starting up on {} port {}'.format(*server_address))
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
while True:
# 等待客户端连接
print('Waiting for a connection')
connection, client_address = server_socket.accept()
try:
print('Connection from', client_address)
# 接收数据
while True:
data = connection.recv(1024)
print('Received {!r}'.format(data))
if data:
# 处理数据(这里只是简单回显)
print('Sending data back to the client')
connection.sendall(data)
else:
print('No more data from', client_address)
break
finally:
# 清理连接
connection.close()
客户端端代码(节点B)
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('localhost', 12345)
print('Connecting to {} port {}'.format(*server_address))
client_socket.connect(server_address)
try:
# 发送数据
message = 'Hello from client!'
print('Sending {!r}'.format(message))
client_socket.sendall(message.encode())
# 接收响应
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = client_socket.recv(16)
amount_received += len(data)
print('Received {!r}'.format(data))
finally:
# 清理连接
print('Closing socket')
client_socket.close()
运行示例
- 首先,运行服务器端代码(节点A)。
- 然后,运行客户端端代码(节点B)。
- 客户端将发送一条消息给服务器,服务器将接收并回显这条消息。
这个示例非常基础,只展示了简单的客户端-服务器通信模式。在实际的分布式系统中,可能需要处理更复杂的问题,如并发、错误处理、数据一致性、节点间的协作等。此外,还可以使用更高级的框架和工具来构建分布式系统,如Apache Kafka、RabbitMQ用于消息传递,Redis、Memcached用于分布式缓存,以及Kubernetes、Docker用于容器化部署和管理等。