重构同步客户端以使用异步扭曲调用

时间:2011-12-06 22:47:24

标签: python refactoring network-programming twisted

我通过开发网络应用程序发现了扭曲的中途。我有一个使用原始套接字通信的工作客户端和服务器,但选择使用Twisted以便在服务器端异步处理多个连接。扭曲的服务器可以正常使用以下连接到它的原始套接字客户端类:

class Client:
  def __init__(self, backend, port=22220):
    import socket
    self.role_buf = 4096
    self.buf = 1024
    self.addr = (backend, port)
    self.TCPSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.TCPSock.connect(self.addr)

  def getRoleList(self):
    self.TCPSock.send("RLP")
    data = self.TCPSock.recv(self.role_buf)
    return data.split("|")

  def getServer(self, roleindex=0):
    self.TCPSock.send(roleindex)
    ip = self.TCPSock.recv(self.buf)
    self.TCPSock.close()
    return ip

我想做的是使用Twisted的clean socket和reactor抽象重构客户端代码。我希望能够在我的基于Qt的客户端GUI(使用PyQt)中实例化客户端类,通过调用来自用户的getRoleList()getserver()来收集用户的事件驱动(异步)输入。基于PyQt的客户端代码。我不想使用PyQt套接字/反应器实现,我想使用单个库进行网络通信。

这可能,如果是这样,我该怎么做?我认为它应该是,但花了很长时间研究和阅读扭曲的文档,包括这些excellent tutorials我似乎无法从他们那里收集到如何实现解决方案。也许我在做一些傻事,我需要拍手?

典型的服务器/客户端互动:

服务器始终在端口22220上侦听,当它从客户端收到“角色列表请求”时,它会将其(动态)角色选择列表推送到客户端。然后,客户端在GUI中向用户显示这些角色选择,用户选择他们想要的单个角色,然后客户端将该请求发送回服务器。然后,服务器使用适合用户特定选择的数据进行响应。

1 个答案:

答案 0 :(得分:2)

快速Twisted客户端和服务器信息的最佳选择是查看Twisted How To docs:

http://twistedmatrix.com/documents/current/core/howto/index.html

特别是:Writing a TCP Server(你似乎有效)

和:Writing a TCP Client

在你的脑袋缠绕之后,从这里获得第三方qtreactor:

https://github.com/ghtdak/qtreactor

并使用它来集成Qt并在您的客户端中绞合在一起。这个反应器允许PyQt和Twisted在同一个应用程序中并排运行而不会相互阻塞。