【发布时间】:2020-09-23 15:30:58
【问题描述】:
好的,这是一个我遇到问题的项目。我已经编写了代码,但它遇到了问题。坦率地说,我什至不确定我是否连接了我必须正确使用的两个文件,所以如果有人可以帮我确定问题所在,我会很高兴获得帮助。以下是说明/提示。
分布式计算应用程序中的常见任务通常需要 一台计算机能够远程调用一个程序的能力 分布式系统中的另一台计算机。本作业介绍 这个想法进一步使用了 XML-RPC 和 Python。
XML-RPC 是一种用于调用过程的协议(即方法或 功能)由一台计算机(客户端)在另一台计算机(服务器)上。它的 名称源于 XML 用于对过程调用进行编码这一事实。 用于将 XML 从客户端传输到服务器的方法是 HTTP。虽然 Python 内置了对此功能的支持,但它是 需要注意的是,支持不仅限于 Python,还扩展到 大多数高级语言添加。这是设计中固有的,因为 编码是通用 XML,传输是 HTTP。
最后,有很多方法可以实现这样的功能。为了 Python,虽然超出了本课程的范围,但感兴趣的读者 应该探索 Pyro、RPyC 和 Fabric 等项目。
XML-RPC 在 Python 中的实现可以在 xmlrpc 包中找到。在 这个包,所需的模块是 xmlrpc.client 和 xmlrpc.server.
作业
此作业要求您开发两个 Python 程序。一个是一个 客户端,另一个是服务器。
服务器 服务器应该“注册”客户端将要注册的 x 个程序 能够打电话。然后它将绑定到地址“localhost”和端口 8000。这是服务器将侦听请求的地址和端口。请注意,如果您有绑定错误,您可以使用另一个 端口,因为您的计算机可能有一个使用 8000 的应用程序。大多数 但是,这会起作用。您的服务器调用必须是 格式如下:
python server.py 本地主机 8000
要支持的这些过程如下: name - 返回 在服务器期间在命令行上传递的服务器名称 调用帮助 - 返回服务器的过程列表 支持 servertime – 以 24 返回服务器的当前时间 小时格式。 IE。 13:00:01 add(x,y) – 返回 x 和 y 的和 sub(x,y) – 返回 x – y mult(x,y) – 返回 x * y div(x,y) – 返回 x/y(一定要处理除以0的情况)
客户 客户端将使用服务器的 服务器正在侦听的地址和端口(见上文)。它 然后将使用值 8 执行每个支持的程序 和 6 分别代表 x 和 y 的值。您的客户端调用必须 格式如下:
python client.py host_address host_port 8 6
其中 host_address 和 host_port 是 服务器正在监听。如果您使用单台计算机作为服务器 客户端计算机只需使用“localhost”作为地址和端口 上面用过。 8 和 6 是 x 和 y 的值。
客户端的示例输出:
8 * 6 是 48.0 8 / 6 是 1.3333333333333333 8 + 6 是 14.0 8 - 6 是 2.0 8 / 0 是无穷大 13:50:22
我将提供这两个文件的代码,以便有人可以提供帮助。 Server.py 文件比 Client.py 文件有更多问题,但无论如何我都会发布。
Server.py
import sys
import time
from xmlrpc.server import SimpleXMLRPCServer
argumentList = sys.argv
hostAddress = argumentList[1]
port = argumentList[2]
server = SimpleXMLRPCServer((hostAddress, int(port)))
def addition(x, y):
return x + y
def subtraction(x, y):
return x - y
def multiplication(x, y):
return x * y
def division(x, y):
try:
return x / y
except ZeroDivisionError:
return "To Infinity and Beyond! Whee!"
def name():
return hostAddress
def helpMe():
return server.systemListMethods()
def serverTime():
return time.strftime("%H:%M:%S")
server.register_function(helpMe)
server.register_function(addition)
server.register_function(serverTime)
server.register_function(subtraction)
server.register_function(multiplication)
server.register_function(division)
server.serve_forever()
Client.py
import xmlrpc.client
import sys
argumentsList = sys.argv
hostAddress = argumentsList[1]
hostPort = argumentsList[2]
URI = "http://" + hostAddress + ":" + hostPort
num1 = int(argumentsList[3])
num2 = int(argumentsList[4])
proxy = xmlrpc.client.ServerProxy(URI)
print('{} + {} is {}'.format(num1, num2, proxy.add(num1, num2)))
print('{} - {} is {}'.format(num1, num2, proxy.sub(num1, num2)))
print('{} * {} is {}'.format(num1, num2, proxy.mul(num1, num2)))
print('{} / {} is {}'.format(num1, num2, proxy.div(num1, num2)))
print(proxy.name())
print(proxy.help())
print(proxy.serverTime())
对此的任何帮助将不胜感激。
【问题讨论】:
标签: python xml distributed-computing xml-rpc