Skip to content

Instantly share code, notes, and snippets.

@luw2007
Created August 21, 2018 08:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luw2007/de1f74fbe157444f214fa6198be700a1 to your computer and use it in GitHub Desktop.
Save luw2007/de1f74fbe157444f214fa6198be700a1 to your computer and use it in GitHub Desktop.
"""
redis proxy
用来展示redis协议
"""
import asyncio
redis_addr = ('127.0.0.1', 6379)
proxy_addr = ('127.0.0.1', 6380)
async def pipe(reader, writer):
try:
while not reader.at_eof():
data = await reader.read(1024)
print(data)
writer.write(data)
finally:
writer.close()
async def handle_client(local_reader, local_writer):
try:
remote_reader, remote_writer = await asyncio.open_connection(
*redis_addr)
send_pipe = pipe(local_reader, remote_writer)
recv_pipe = pipe(remote_reader, local_writer)
await asyncio.gather(send_pipe, recv_pipe)
finally:
local_writer.close()
if __name__ == "__main__":
# Create the server
loop = asyncio.get_event_loop()
coro = asyncio.start_server(handle_client, *proxy_addr)
server = loop.run_until_complete(coro)
print('Serving on {}'.format(server.sockets[0].getsockname()))
loop.run_forever()
loop.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment