Python 如何通过aiohttp请求处理程序中的客户端websocket发送数据

Python 如何通过aiohttp请求处理程序中的客户端websocket发送数据,python,websocket,aiohttp,Python,Websocket,Aiohttp,我正在构建一个简单的HTTP web服务,但我想通过websocket将信息发送到另一台服务器 例如,当web服务在/foo上接收请求时,它会在websocket上发送“请求在/foo上接收” 我对Python中的异步编程相当陌生。 为此,我选择了aiohttp,但这不是一个硬性要求 我以前在websocket和高速公路方面有一些经验,起初我试着将aiohtpp和autobahn混合使用。 我甚至找到了一个两者都有的,但它使用了wamp,我只想要websocket 然后我试着不使用autobah

我正在构建一个简单的HTTP web服务,但我想通过websocket将信息发送到另一台服务器

例如,当web服务在
/foo
上接收请求时,它会在websocket
上发送“请求在/foo上接收”

我对Python中的异步编程相当陌生。 为此,我选择了
aiohttp
,但这不是一个硬性要求

我以前在websocket和高速公路方面有一些经验,起初我试着将
aiohtpp
autobahn
混合使用。 我甚至找到了一个两者都有的,但它使用了
wamp
,我只想要websocket

然后我试着不使用autobahn作为
aiohttp
处理websocket

我最后一次尝试是这样的:

从aiohttp导入web、ClientSession、WSMsgType
异步def回调(msg):
打印(msg)
异步def websocket(会话):
与session.ws\u connect()异步http://localhost:8000“)作为ws:
应用程序['ws']=ws
ws中消息的异步:
如果msg.type==WSMsgType.TEXT:
等待回调(msg.data)
elif msg.type==WSMsgType.CLOSED:
打破
elif msg.type==WSMsgType.ERROR:
打破
异步def hello(请求):
app.ws.send_str(“{”hello:“world”}”)
返回web.Response(text=“你好,世界”)
异步定义初始化(应用程序):
session=ClientSession()
app['websocket_task']=app.loop.create_任务(websocket(会话))
app=web.Application()
app.add_routes([web.get('/',hello)])
app.on_startup.append(init)
web.run_应用程序(应用程序,端口=7000)
请求
/
时,它会兑现,但以下情况除外:
AttributeError:“应用程序”对象没有属性“ws”

如何将http服务和websocket上的写操作作为客户端混合使用?
有可能吗?

有时候你只需要睡个好觉

基本上,我需要初始化一个资源并在处理程序中使用它。 与数据库连接完全相同

我以此为例,根据自己的需要进行了调整。 下面是它的外观:

从aiohttp导入web,客户端会话
类处理程序:
定义初始化(自我,ws):
self._ws=ws
异步def hello(self):
等待自我。_ws.send_str(“{”你好“:“世界”}”)
返回web.Response(text=“你好,世界”)
异步定义初始化(应用程序):
session=ClientSession()
ws=wait session.ws\u connect('http://localhost:8000')
h=处理器(ws)
app.add_routes([web.get('/',h.hello)])
app=web.Application()
app.on_startup.append(init)
web.run_应用程序(应用程序,端口=7000)
我希望这可以帮助其他
asyncio
/
aiohttp
初学者

干杯