第二次通话失败

Posted

技术标签:

【中文标题】第二次通话失败【英文标题】:Fail on second call 【发布时间】:2015-09-01 10:09:53 【问题描述】:

我需要你的帮助。

此代码只运行一次,第二个 wget 会超时(附加文件)。

wgethttp://localhost:9090

#!/usr/bin/env python 将 trollius 导入为异步 从金鱼草进口自 导入操作系统 类客户端(asyncio.Protocol): def connection_made(自我,运输): self.connected = 真 # 保存传输 self.transport = 运输 def data_received(自我,数据): # 转发数据到服务器 self.server_transport.write(数据) def connection_lost(self, *args): self.connected = False 类服务器(asyncio.Protocol): 客户 = def connection_made(自我,运输): # 保存传输 self.transport = 运输 @asyncio.coroutine 定义发送数据(自我,数据): # 通过 peername 获取客户端 peername, port = self.transport.get_extra_info('peername') 客户端 = self.clients.get(peername) # 如果 peername 未知或客户端断开连接,则创建客户端 如果客户端是 None 或不是 client.connected: 协议,客户端 = yield From(loop.create_connection(Client, 'google.com', 80)) client.server_transport = self.transport self.clients[peername] = 客户 # 将数据转发给客户端 client.transport.write(数据) def data_received(自我,数据): # 使用一个任务,所以这是异步执行的 asyncio.Task(self.send_data(data)) @asyncio.coroutine 定义初始化(循环): # 使用协程使用yield from并获取异步结果 # 创建服务器 server = yield From(loop.create_server(Server, '127.0.0.1', 9090)) 循环 = asyncio.get_event_loop() # 初始化所有内容的主要任务 asyncio.Task(初始化(循环)) # 跑步 loop.run_forever()

有人知道原因吗?

谢谢!

【问题讨论】:

如果可能,请提供错误日志。 【参考方案1】:

当您在 asyncio 中编写套接字服务器时,您需要在服务器中建立一个真正的“循环”。请注意,尽管有“同步”编码,但无限循环不会在此处阻止执行。您需要在服务器中进行无限循环。样本很多,推荐websockets库样本!

【讨论】:

以上是关于第二次通话失败的主要内容,如果未能解决你的问题,请参考以下文章

模拟第一次调用失败,第二次调用成功

RxBluetoothkit 调用retrievePeripherals 第二次失败

gitlab第一次推送成功第二次失败

断言失败第二次添加/删除

-[EAGLContext renderbufferStorage:fromDrawable:] 第二次失败?

第二次python执行失败