我有一个很可能属于 Twisted 或可能与 Python 直接相关的问题。
我的问题,另一个与 Twisted 中的断开连接过程有关。正如我在本网站上所读到的,如果我愿意,我必须执行以下步骤:
- 服务器必须停止监听。
- 客户端连接必须断开。
- 服务器连接必须断开。
根据我在上一页上阅读的内容,第一步必须运行该stopListening
方法。
在网络中提到的示例中,所有操作都在同一个脚本中执行。使访问不同的变量和方法变得容易。
对我来说,我有一个服务器,一个客户端位于不同的文件和不同的位置。
我有一个创建服务器并分配协议的函数,并希望从另一个文件中的客户端协议对停止连接器的方法进行 AMP 调用。
call AMP 调用 SendMsg 命令。
class TESTServer(protocol.Protocol):
factory = None
sUsername = ""
credProto = None
bGSuser = None
slot = None
"""
Here was uninteresting code.
"""
# upwards=self.bGSuser, forwarded=True, tx_timestamp=iTimestamp,\
# message=sMsg)
log.msg("self.connector")
log.msg(self.connector)
return {'bResult': True}
SendMsg.responder(vSendMsg)
def _testfunction(self):
logger = logging.getLogger('server')
log.startLogging(sys.stdout)
pf = CredAMPServerFactory()
sslContext = ssl.DefaultOpenSSLContextFactory('key/server.pem',\
'key/public.pem',)
self.connector = reactor.listenSSL(1234, pf, contextFactory = sslContext,)
log.msg('Server running...')
reactor.run()
if __name__ == '__main__':
TESTServer()._testfunction()
CredAMPServerFactory 类分配相应的协议。
class CredAMPServerFactory(ServerFactory):
"""
Server factory useful for creating L{CredReceiver} and L{SATNETServer} instances.
This factory takes care of associating a L{Portal} with the L{CredReceiver}
instances it creates. If the login is succesfully achieved, a L{SATNETServer}
instance is also created.
"""
protocol = CredReceiver
在“CredReceiver”类中,我有一个将协议分配给 TestServer 类的调用。我这样做是为了使用 AMP 方法“响应程序”进行调用。
self.protocol = SATNETServer
我的问题是,当我进行调用时,程序会响应错误,指示连接器不属于 CredReceiver 属性对象。
File "/home/sgongar/Dev/protocol/server_amp.py", line 248, in vSendMsg
log.msg(self.connector)
exceptions.AttributeError: 'CredReceiver' object has no attribute 'connector'
我怎么能这样做?有谁知道类似的例子可能会注意到?
谢谢你。
编辑。
服务器端:
server_amp.py
启动一个反应器:
reactor.listenSSL(1234, pf, contextFactory = sslContext,)
从 SATNETServer 类中。也从 SATNETServer 类中将协议分配
pf
给CredAMPServerFactory
属于模块 server.py 的类。
服务器.py
- 在类内将类
CredAMPServerFactory
分配CredReceiver
给协议。 - 一旦建立连接,就会将类
SATNETServer
分配给协议。
客户端:
客户端放大器
- 调用
SendMsg
属于SATNETServer
该类的方法。