kore

Kore is a web application platform for writing scalable, concurrent web based processes in C or Python.
Commits | Files | Refs | README | LICENSE | git clone https://git.kore.io/kore.git

commit 66dd856bdc962b2d2b3c46074a27be4c9c597fcd
parent 5e84ebdab23e83d9bf9524162c3a95cddb2405b2
Author: Joris Vink <joris@coders.se>
Date:   Sun,  2 May 2021 16:08:32 +0200

and add the echo.py file of course..

Diffstat:
examples/python-echo/echo.py | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+), 0 deletions(-)

diff --git a/examples/python-echo/echo.py b/examples/python-echo/echo.py @@ -0,0 +1,67 @@ +# +# Copyright (c) 2013-2018 Joris Vink <joris@coders.se> +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +import kore +import socket + +class EchoServer: + # Setup socket + wrap it inside of a kore socket so we can use it. + def __init__(self): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.setblocking(False) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + sock.bind(("127.0.0.1", 6969)) + sock.listen() + + self.conn = kore.socket_wrap(sock) + + # Wait for a new client to connect, then create a new task + # that calls handle_client with the ocnnected client as + # the argument. + async def run(self): + while True: + try: + client = await self.conn.accept() + kore.task_create(self.handle_client(client)) + client = None + except Exception as e: + kore.fatal("exception %s" % e) + + # Each client will run as this co-routine. + # In this case we pass a timeout of 1 second to the recv() call + # which will throw a TimeoutError exception in case the timeout + # is hit before data is read from the socket. + # + # This timeout argument is optional. If none is specified the call + # will wait until data becomes available. + async def handle_client(self, client): + while True: + try: + data = await client.recv(1024, 1000) + if data is None: + break + await client.send(data) + except TimeoutError as e: + print("timed out reading (%s)" % e) + except Exception as e: + print("client got exception %s" % e) + client.close() + +# Setup the server object. +server = EchoServer() + +# Create a task that will execute inside of Kore as a co-routine. +kore.task_create(server.run())