如何在Python中使用tulip / asyncio创建中继服务器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Python中使用tulip / asyncio创建中继服务器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3088字,纯文字阅读大概需要5分钟。
内容图文
import asyncio
class EchoServer(asyncio.Protocol):
def connection_made(self, transport):
peername = transport.get_extra_info('peername')
print('connection from {}'.format(peername))
self.transport = transport
def data_received(self, data):
self.transport.write(data)
# Client piece goes here
loop = asyncio.get_event_loop()
coro = loop.create_server(EchoServer, '127.0.0.1', 8888)
server = loop.run_until_complete(coro)
print('serving on {}'.format(server.sockets[0].getsockname()))
try:
loop.run_forever()
except KeyboardInterrupt:
print("exit")
finally:
server.close()
loop.close()
我正在尝试做的是添加一个客户端部分,我评论说它将连接到一台新服务器并从那个方向发送数据.这是echo client,但我需要一个看起来像这样的流程:
+-----------+ +-----------+ +--------------+
| My Server | | My Client | | Other Server |
+-----------+ +-----------+ +--------------+
| | |
===>Get some data | |
| | |
Send data ---------->| |
| | |
| Send data ----------->|
| | |
| | Do Stuff
| | |
| | <-----------Send Data
| | |
| <--------- Send data |
| | |
<=== Send data | |
| | |
| | |
| | |
| | |
显然,我可以同步执行此操作,但我正在尝试创建客户端 – >其他服务器位异步,我真的不知道如何使用asyncio方法在我的服务器块和客户端之间进行通信.
我需要做什么?
解决方法:
这是一个简单的代理,允许你wget 127.0.0.1:8888并从谷歌得到一个HTML回复:
import asyncio
class Client(asyncio.Protocol):
def connection_made(self, transport):
self.connected = True
# save the transport
self.transport = transport
def data_received(self, data):
# forward data to the server
self.server_transport.write(data)
def connection_lost(self, *args):
self.connected = False
class Server(asyncio.Protocol):
clients = {}
def connection_made(self, transport):
# save the transport
self.transport = transport
@asyncio.coroutine
def send_data(self, data):
# get a client by its peername
peername = self.transport.get_extra_info('peername')
client = self.clients.get(peername)
# create a client if peername is not known or the client disconnect
if client is None or not client.connected:
protocol, client = yield from loop.create_connection(
Client, 'google.com', 80)
client.server_transport = self.transport
self.clients[peername] = client
# forward data to the client
client.transport.write(data)
def data_received(self, data):
# use a task so this is executed async
asyncio.Task(self.send_data(data))
@asyncio.coroutine
def initialize(loop):
# use a coroutine to use yield from and get the async result of
# create_server
server = yield from loop.create_server(Server, '127.0.0.1', 8888)
loop = asyncio.get_event_loop()
# main task to initialize everything
asyncio.Task(initialize(loop))
# run
loop.run_forever()
内容总结
以上是互联网集市为您收集整理的如何在Python中使用tulip / asyncio创建中继服务器?全部内容,希望文章能够帮你解决如何在Python中使用tulip / asyncio创建中继服务器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。