我通过开发网络应用程序发现了扭曲的中途。我有一个使用原始套接字通信的工作客户端和服务器,但选择使用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中向用户显示这些角色选择,用户选择他们想要的单个角色,然后客户端将该请求发送回服务器。然后,服务器使用适合用户特定选择的数据进行响应。
答案 0 :(得分:2)
快速Twisted客户端和服务器信息的最佳选择是查看Twisted How To docs:
http://twistedmatrix.com/documents/current/core/howto/index.html
特别是:Writing a TCP Server(你似乎有效)
在你的脑袋缠绕之后,从这里获得第三方qtreactor:
https://github.com/ghtdak/qtreactor
并使用它来集成Qt并在您的客户端中绞合在一起。这个反应器允许PyQt和Twisted在同一个应用程序中并排运行而不会相互阻塞。