sock.setblocking(False) await loop.sock_connect(sock, address) return sock async def start_client(i, address): sock = await connect(address) await loop.sock_sendall(sock, b'Hello from client %d!' % i) reply = await loop.sock_recv(sock, 1024) print('Client', i, 'got:', reply) # Keep client alive with a read that never returns await loop.sock_recv(sock, 1024) async def start_clients(address): for i in range(5000): loop.create_task(start_client(i, address)) if __name__ == '__main__': soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) print('Setting max number of open files to', hard) resource.setrlimit(resource.RLIMIT_NOFILE, (hard, hard)) print('Starting echo clients') loop.create_task(start_clients(('localhost', 25000))) try: loop.run() except KeyboardInterrupt: print('Stopping echo clients')
chunks = [] while True: chunks.append(await loop.sock_recv(sock, 4096)) if not chunks[-1]: # Server closed connection break sock.close() return b"".join(chunks) async def download_one(host): data = await get(host) print("%-24s %3d KB" % (host + ":", len(data) // 1024)) async def download_all(*hosts): for host in hosts: await download_one(host) if __name__ == '__main__': hosts = [ 'www.nzz.ch', 'www.20min.ch', 'www.blick.ch', 'www.bbc.com', 'www.thetimes.co.uk', 'www.independent.co.uk', 'www.telegraph.co.uk', 'www.nytimes.com', 'www.latimes.com', 'www.usatoday.com', 'www.wsj.com', 'www.srf.ch', 'www.telezueri.ch', 'www.google.ch', 'www.bing.com' ] loop.create_task(download_all(*hosts)) loop.run()
print('Connection', connection_count, 'closed') connection_count -= 1 async def listen(address): global connection_count server_sock = socket.socket() server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_sock.bind(address) server_sock.listen() server_sock.setblocking(False) while True: client_sock, addr = await loop.sock_accept(server_sock) connection_count += 1 print('Connection', connection_count, 'from', addr) loop.create_task(echo(client_sock)) if __name__ == '__main__': soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE) print('Setting max number of open files to', hard) resource.setrlimit(resource.RLIMIT_NOFILE, (hard, hard)) print('Starting echo server') loop.create_task(listen(('', 25000))) try: loop.run() except KeyboardInterrupt: print('Stopping echo server')