我写了一个基本的扭曲服务器,它适用于测试客户端(也是扭曲的)。
这是服务器:
from twisted.internet import protocol, reactor, endpoints
import pickle
from time import sleep
def function(x, y):
sleep(2)
return x+y
class Pickle(protocol.Protocol):
def dataReceived(self, pickled):
data = pickle.loads(pickled)
response = function(*data)
self.transport.write(pickle.dumps(response))
self.transport.loseConnection()
class PickleFactory(protocol.Factory):
def buildProtocol(self, addr):
return Pickle()
endpoint = endpoints.TCP4ServerEndpoint(reactor, 1234)
endpoint.listen(PickleFactory())
reactor.run()
在客户端,我想要像
这样的东西def send(x,y):
'''Calculates function(x,y) on a remote server'''
pass
向服务器发送请求并阻塞,直到获得响应。我不想在客户端做任何事件驱动/异步的事情。反应堆不能重新启动的事实意味着我不能天真地使用扭曲。
撰写send
的最佳方式是什么?我可以用扭曲的吗?或者我应该使用低级别的东西,如socket或telnetlib?
谢谢!
答案 0 :(得分:0)
使用套接字(可能不是最优雅的):
def send(x, y):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 1234))
s.send(pickle.dumps((x, y))
result = b''
while True:
data = s.recv(1024)
if len(data) == 0: break
result += data
s.close()
return (pickle.loads(result))