{ "info": { "author": "Robert Mcgregor", "author_email": "rmcgregor1990@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: AsyncIO", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6" ], "description": "# aio-msgpack-rpc\n[![pipeline status](https://gitlab.com/rmcgregor/aio-msgpack-rpc/badges/master/pipeline.svg)](https://gitlab.com/rmcgregor/aio-msgpack-rpc/commits/master)\n[![coverage report](https://gitlab.com/rmcgregor/aio-msgpack-rpc/badges/master/coverage.svg)](https://rmcgregor.gitlab.io/aio-msgpack-rpc/coverage)\n\nPure asyncio implementation of the [MsgPack RPC](https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md). \nUses [transports, protocols](https://docs.python.org/3/library/asyncio-protocol.html) and [streams](https://docs.python.org/3/library/asyncio-stream.html) provided by the ```asyncio``` standard library.\n\nJust a simple implementation of the RPC layer.\n\n## Installation\n```\npip install aio-msgpack-rpc\n```\n## Example\n### Server\n```python\nimport asyncio\nimport aio_msgpack_rpc\n\n\n# handlers can be defined on a class\n# they can either be async or plain functions\nclass MyServicer:\n async def sum(self, x, y):\n print(f\"sum: {x}, {y}\")\n return x + y\n\n def notification(self, msg):\n print(f\"notification: {msg}\")\n\n\nasync def main():\n try:\n server = await asyncio.start_server(aio_msgpack_rpc.Server(MyServicer()), host=\"localhost\", port=18002)\n\n while True:\n await asyncio.sleep(0.1)\n finally:\n server.close()\n\ntry:\n asyncio.get_event_loop().run_until_complete(main())\nexcept KeyboardInterrupt:\n pass\n```\n\n### Client\n```python\nimport asyncio\nimport aio_msgpack_rpc\n\nasync def main():\n client = aio_msgpack_rpc.Client(*await asyncio.open_connection(\"localhost\", 18002))\n\n # blocking rpc calls\n result = await client.call(\"sum\", 1, 2)\n assert result == 3\n\n # one way notifications\n client.notify(\"notification\", \"hello\")\n\nasyncio.get_event_loop().run_until_complete(main())\n```\n\n### Benchmark\nSome basic performance benchmarks against the official implementation on my development machine.\n\n| package | call (QPS) | notify (QPS) |\n| ------------- |:-------------:| -----:|\n| msgpack-rpc-python | 5414 | 11746 |\n| aio-msgpack-rpc | 5781 | 86957 |\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/rmcgregor/aio-msgpack-rpc", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "aio-msgpack-rpc", "package_url": "https://pypi.org/project/aio-msgpack-rpc/", "platform": "", "project_url": "https://pypi.org/project/aio-msgpack-rpc/", "project_urls": { "Homepage": "https://gitlab.com/rmcgregor/aio-msgpack-rpc" }, "release_url": "https://pypi.org/project/aio-msgpack-rpc/0.1.0/", "requires_dist": [ "msgpack", "pytest; extra == 'test'", "pytest-asyncio; extra == 'test'", "asyncio-extras; extra == 'test'" ], "requires_python": ">=3.6", "summary": "asyncio MsgPack RPC", "version": "0.1.0" }, "last_serial": 3975436, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5cf15d5e8176e3e66f9843b78719525f", "sha256": "7ab272f9b4724f953cdacfee4fb8780d246a718963226bbd86072a4913877d79" }, "downloads": -1, "filename": "aio_msgpack_rpc-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5cf15d5e8176e3e66f9843b78719525f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5708, "upload_time": "2018-06-19T02:44:14", "url": "https://files.pythonhosted.org/packages/12/ca/2d200b8de73a54b6c6b9ffa72931bcb1cecace195040adce6429ed60bdda/aio_msgpack_rpc-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e70eb540da8033a5975c26c5d3e31b16", "sha256": "5215fa1d8057a02de06dd15cd063ccd92214160ad4354b3d07f6f45ce43dc9cc" }, "downloads": -1, "filename": "aio-msgpack-rpc-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e70eb540da8033a5975c26c5d3e31b16", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8163, "upload_time": "2018-06-19T02:44:16", "url": "https://files.pythonhosted.org/packages/f7/9a/99dbd3b98e8fc6ff3e7f2ecb7934978333c076450c8fe11c16081b523467/aio-msgpack-rpc-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5cf15d5e8176e3e66f9843b78719525f", "sha256": "7ab272f9b4724f953cdacfee4fb8780d246a718963226bbd86072a4913877d79" }, "downloads": -1, "filename": "aio_msgpack_rpc-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5cf15d5e8176e3e66f9843b78719525f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5708, "upload_time": "2018-06-19T02:44:14", "url": "https://files.pythonhosted.org/packages/12/ca/2d200b8de73a54b6c6b9ffa72931bcb1cecace195040adce6429ed60bdda/aio_msgpack_rpc-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e70eb540da8033a5975c26c5d3e31b16", "sha256": "5215fa1d8057a02de06dd15cd063ccd92214160ad4354b3d07f6f45ce43dc9cc" }, "downloads": -1, "filename": "aio-msgpack-rpc-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e70eb540da8033a5975c26c5d3e31b16", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8163, "upload_time": "2018-06-19T02:44:16", "url": "https://files.pythonhosted.org/packages/f7/9a/99dbd3b98e8fc6ff3e7f2ecb7934978333c076450c8fe11c16081b523467/aio-msgpack-rpc-0.1.0.tar.gz" } ] }