如何编写与扭曲服务器通信的内容?

时间:2015-07-27 20:49:53

标签: python sockets tcp twisted

我写了一个基本的扭曲服务器,它适用于测试客户端(也是扭曲的)。

这是服务器:

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?

谢谢!

1 个答案:

答案 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))