{ "info": { "author": "turen", "author_email": "nb@turen.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "==============\ndjango-ws4ever\n==============\n\n\u63d0\u4f9b\u57fa\u4e8egevent\u7684websocket\u7684handler\n\nQuick start\n-----------\n1. Install::\n\n pip install django_ws4ever\n\n\n2. Add \"ws4ever\" to your INSTALLED_APPS setting like this::\n\n INSTALLED_APPS = [\n ...\n 'ws4ever',\n ]\n\n3. complete your own websocket handler class::\n\n from ws4ever.views import BaseWebSocketApplication\n class WebSocketClientApplication(BaseWebSocketApplication):\n def __init__(self, ws):\n pass\n\n def handle_message(self, kind, payload=None):\n pass\n\n4. set the websocket config path::\n\n # ws4ever conf\n WS4EVER = {\n 'ROUTES': { #websocket path and handler class\n \"/ws\": \"django_ws4ever.views.WebSocketClientApplication\"\n },\n 'MAX_IDLE': 30, # seconds, interval to check zombie websocket connections\n 'NOTIFY_BACKEND': 'redis://:password@redis-host:redis_port/db_id' # or 'memory'\n }\n\n5. patch gevent in manage.py::\n #prepend these code before any python code, possibly in line 2\n from gevent import monkey;monkey.patch_all(thread=False)\n\n6. runserver\n python manage.py runserver\n\n7. test websocket in js::\n\n var ws = new WebSocket(\"ws://localhost:8000/ws\");\n ws.onopen = function()\n {\n console.log(\"on open\");\n ws.send(JSON.stringify({kind:'kind', payload:'payload'}));\n };\n ws.onmessage = function (evt)\n {\n var received_msg = evt.data;\n console.log(\"receive message\", received_msg);\n };\n ws.onclose = function()\n {\n console.log(\"Connection is closed...\");\n };\n\n8. [Optional] if you want to use wsgi to run websocket(ig.use gunicorn), config wsgi like that\n 8.1 config project wsgi.py::\n\n #append to tail, must after os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"xx.settings\")\n # gunicorn \u7528\u7684 websocket wsgi\n from geventwebsocket import Resource\n from ws4ever.helpers import get_websocket_sources\n ws_application = Resource(get_websocket_sources())\n\n 8.2 run gunicorn like::\n\n #replace wsgi path to your own, replace your port\n `gunicorn -k \"geventwebsocket.gunicorn.workers.GeventWebSocketWorker\" django_ws4ever.wsgi:ws_application --bind 127.0.0.1:8001`\n\n9. [Optional/Advanced] broadcast and receive message\n 9.1 config broadcast backend::\n you can send notify via redis or memory.\n Via redis, you can send notification to multi processes; via memory, you can only send notification in current process.\n You are supposed to use memory in development and redis in production environment.\n in settings.py::\n\n WS4EVER = {\n ...\n 'NOTIFY_BACKEND': 'redis://:password@redis-host:redis_port/db_id' # or 'memory'\n }\n\n 9.2 can send broadcast by::\n\n from ws4ever.redis import notify_clients\n notify_clients('kind', 'payload', extra_field='extra_value', extra_field2='extra_value2')\n\n 9.3 then can handle the messages in WebSocketClientApplication you created in step 3 above::\n\n class WebSocketClientApplication(BaseWebSocketApplication):\n ...\n\n @classmethod\n def on_notify(cls, kind, payload, **extra):\n #add your handle code here", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "django-ws4ever", "package_url": "https://pypi.org/project/django-ws4ever/", "platform": "", "project_url": "https://pypi.org/project/django-ws4ever/", "project_urls": null, "release_url": "https://pypi.org/project/django-ws4ever/0.5.1/", "requires_dist": null, "requires_python": "", "summary": "websocket server for django", "version": "0.5.1" }, "last_serial": 3203888, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fd7062a2ceba7fd49b84ee94dab6df82", "sha256": "862dbbde70c762c1eb0e42650635160554777af00c24bf14b0bdf5357e5d784e" }, "downloads": -1, "filename": "django-ws4ever-0.1.0.tar.gz", "has_sig": false, "md5_digest": "fd7062a2ceba7fd49b84ee94dab6df82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8395, "upload_time": "2017-08-09T09:07:29", "url": "https://files.pythonhosted.org/packages/fd/94/f83d7589228013369bf679bb6007a439019e90de9129ae12659240141327/django-ws4ever-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "80bd4d6c12ac516476046787accb157c", "sha256": "114ddcf89d63eb71f5c0b81dcbab42010f07c01fe74764c20ef499c6ec30363c" }, "downloads": -1, "filename": "django-ws4ever-0.1.1.tar.gz", "has_sig": false, "md5_digest": "80bd4d6c12ac516476046787accb157c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8523, "upload_time": "2017-08-10T01:40:38", "url": "https://files.pythonhosted.org/packages/aa/5b/ae470026c16b07de82a04c34f6979d128a18fc85f7dbbd30fc495916c58b/django-ws4ever-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "4a0f040e564e050caf2c9feaba9ca56d", "sha256": "37493319e102c4749d3b5d8816502409b575b1b7a195cb08f1cbcc3b5006813b" }, "downloads": -1, "filename": "django-ws4ever-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4a0f040e564e050caf2c9feaba9ca56d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9848, "upload_time": "2017-08-14T07:41:47", "url": "https://files.pythonhosted.org/packages/9d/b3/c38a68a1f1c4ddb3229d57583e523cdf15bc4573ca20b1a4293de2623cb7/django-ws4ever-0.1.2.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "739ba11294eea3e1928d8e7d421c2dd5", "sha256": "eca6f61eb8435bc71f98ef37e29147a06c5bc1d22b1fe7528d276791f304c689" }, "downloads": -1, "filename": "django-ws4ever-0.1.4.tar.gz", "has_sig": false, "md5_digest": "739ba11294eea3e1928d8e7d421c2dd5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9780, "upload_time": "2017-08-15T02:24:06", "url": "https://files.pythonhosted.org/packages/70/b3/c734cf1e6e75dfa1b02319f154e4f09332113eb86fec620712b61dd5ce23/django-ws4ever-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "ff20b32fabd90b9f3b2a40461c5a36bb", "sha256": "53bf8fc810581304b56301a37d6645bae164db8ac231df59752d75803685447c" }, "downloads": -1, "filename": "django-ws4ever-0.1.5.tar.gz", "has_sig": false, "md5_digest": "ff20b32fabd90b9f3b2a40461c5a36bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9773, "upload_time": "2017-08-15T02:49:13", "url": "https://files.pythonhosted.org/packages/28/35/c25f5b995a459a09d1d2978d1a3309ac0adea17a8980780cf364d9e4cf95/django-ws4ever-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "a5ffd4bcee68b1f12c569e9be63d45e4", "sha256": "350e0d722151f11d05c4e240d1eb1116b6c8bcb7792237d19cc342327576af15" }, "downloads": -1, "filename": "django-ws4ever-0.1.6.tar.gz", "has_sig": false, "md5_digest": "a5ffd4bcee68b1f12c569e9be63d45e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9576, "upload_time": "2017-08-17T01:35:13", "url": "https://files.pythonhosted.org/packages/70/aa/1412b11ec5ebe769fbc2b0a2b5a8e735f49312930ac57fdb54cab3492cf9/django-ws4ever-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "366383bf5dd856940016f632911efa9b", "sha256": "a276137000231ef8cea5179c3bd0d2b889a9fd08980771cc8d15f4c788916253" }, "downloads": -1, "filename": "django-ws4ever-0.1.7.tar.gz", "has_sig": false, "md5_digest": "366383bf5dd856940016f632911efa9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9512, "upload_time": "2017-08-17T06:18:02", "url": "https://files.pythonhosted.org/packages/8f/cf/4faafca7b954dae3fe67f6e1a6dbe026a6d6351a5008cc907a974a3ac2ee/django-ws4ever-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "fbe868374aa23b0f368f087c07f6ea91", "sha256": "d1d6da004a4bb4dc56fcf9289934dfe5c8c312a5125c2143ca2eb8c3fe564dca" }, "downloads": -1, "filename": "django-ws4ever-0.1.8.tar.gz", "has_sig": false, "md5_digest": "fbe868374aa23b0f368f087c07f6ea91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9501, "upload_time": "2017-08-17T06:36:58", "url": "https://files.pythonhosted.org/packages/2c/00/fd998fc9a9072604506ec0d79688c562de338257785db5c2ba107bed128e/django-ws4ever-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2cd8385da683462468535ddc356c15aa", "sha256": "8a925bf1044b1552f76796eb66a6ccf951b051dbcd3dafd93f53efd2e74acd91" }, "downloads": -1, "filename": "django-ws4ever-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2cd8385da683462468535ddc356c15aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9603, "upload_time": "2017-08-18T01:48:57", "url": "https://files.pythonhosted.org/packages/f0/b0/7e3f17fd81a7cc918c8ade01e6e7ef0f55a4792a969bef22190b6f5cb683/django-ws4ever-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "56797bac116776a97fcafeb9701834b0", "sha256": "f6111127cc0662f0a30ccfc006aeac64017d3f8835f67f8a26d6ea3dad97b47d" }, "downloads": -1, "filename": "django-ws4ever-0.2.1.tar.gz", "has_sig": false, "md5_digest": "56797bac116776a97fcafeb9701834b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9606, "upload_time": "2017-08-18T02:54:16", "url": "https://files.pythonhosted.org/packages/91/dd/c545a717d0da2282499f4cda25cf65e694b0d11405d1232b964e61d8c646/django-ws4ever-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "1c39447b8076b2b44ef93869f371a7a0", "sha256": "21eed2b44520caa49290075d613f6bdeb129820753709e092977279150d4e4fd" }, "downloads": -1, "filename": "django-ws4ever-0.2.2.tar.gz", "has_sig": false, "md5_digest": "1c39447b8076b2b44ef93869f371a7a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10022, "upload_time": "2017-08-21T13:45:30", "url": "https://files.pythonhosted.org/packages/73/4d/392d9436eeee19e7ae8a5d8aad0cd18e88f44a2181d57fae6491e266db36/django-ws4ever-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "cc9afe7281b2f0102135911ed7564e0f", "sha256": "40646362178123835b6e8f8759c1af07797db7b358291d352a51218a2d64373f" }, "downloads": -1, "filename": "django-ws4ever-0.3.0.tar.gz", "has_sig": false, "md5_digest": "cc9afe7281b2f0102135911ed7564e0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10014, "upload_time": "2017-08-22T06:22:45", "url": "https://files.pythonhosted.org/packages/1f/fc/0309bd2faee2be3ea79334e5bb4fe99599f9f30aea11c5482f7e3a1567e3/django-ws4ever-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "57f0eddb7eb9d23808e7228517623594", "sha256": "449425f70ea4550407160ad50147d5ad5aa18d402c2a52d8e1cb3b557ea123fd" }, "downloads": -1, "filename": "django-ws4ever-0.4.0.tar.gz", "has_sig": false, "md5_digest": "57f0eddb7eb9d23808e7228517623594", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10472, "upload_time": "2017-08-28T04:16:19", "url": "https://files.pythonhosted.org/packages/ae/12/a2a99110c58d54ce5be52080391372490fccde7a09d5695be35c892c674c/django-ws4ever-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "233c4282317c7a6f24226aca31a8d38d", "sha256": "6ede077e09450616537fff9860c7329b812141a7aa5ee790b8af2309aef4f04d" }, "downloads": -1, "filename": "django-ws4ever-0.4.1.tar.gz", "has_sig": false, "md5_digest": "233c4282317c7a6f24226aca31a8d38d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10569, "upload_time": "2017-09-05T16:38:06", "url": "https://files.pythonhosted.org/packages/97/aa/58e073aceb079e8c85e36292f9e6e6c4904ac42f837838d14dc3c8bf4fc3/django-ws4ever-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "047cd7f860a12de315147ecae965d868", "sha256": "1f0f8172fc99f91ba63fab98aab3d15c1331dc3a3f5ed4d6cb000ebf21442bfd" }, "downloads": -1, "filename": "django-ws4ever-0.4.2.tar.gz", "has_sig": false, "md5_digest": "047cd7f860a12de315147ecae965d868", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10543, "upload_time": "2017-09-08T09:31:05", "url": "https://files.pythonhosted.org/packages/df/ae/71ec86bac1c5c1ef71c2916fedfd87ce966b80a09d5b022ad679ba95d645/django-ws4ever-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "68ec1ca0ae812c1571c4182097d72f49", "sha256": "6e6d24ffabbef4dafa051ea69e8ff03fba5ae466a46aba404573745b0e468a36" }, "downloads": -1, "filename": "django-ws4ever-0.4.3.tar.gz", "has_sig": false, "md5_digest": "68ec1ca0ae812c1571c4182097d72f49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10580, "upload_time": "2017-09-20T13:31:15", "url": "https://files.pythonhosted.org/packages/86/f5/848d8faa961716f27fb56f896238ed57030d1347c863dbb066def20ae274/django-ws4ever-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "8bf186bf3612add4952076bf74edb83d", "sha256": "fd004b27839dd40f8a4e9ece5e1a342c51a680745992a38b47ecdb57505eb846" }, "downloads": -1, "filename": "django-ws4ever-0.4.4.tar.gz", "has_sig": false, "md5_digest": "8bf186bf3612add4952076bf74edb83d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10559, "upload_time": "2017-09-26T03:38:19", "url": "https://files.pythonhosted.org/packages/ca/3c/25820a501adcc5af984132a68a67ac14972d370a8357ac85a2fd1a0caffe/django-ws4ever-0.4.4.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "342e213c348050b0b29fe889cb141818", "sha256": "60d399dd42b59c1ddfa61eab33a0a0466c79076eeb6ab1a5cd1467ccb5d873da" }, "downloads": -1, "filename": "django-ws4ever-0.5.0.tar.gz", "has_sig": false, "md5_digest": "342e213c348050b0b29fe889cb141818", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10872, "upload_time": "2017-09-26T05:08:01", "url": "https://files.pythonhosted.org/packages/4e/f4/ac753de4e95b5b8ced27fb4a8a7338f491423487e7ddd328de9d74220f1b/django-ws4ever-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "7bdc18832460ffbafb599af004089a11", "sha256": "ca98dc29620ee7cadec34ca0db70cfe120bf6c6b58d0a36c14fe29e4a51b1902" }, "downloads": -1, "filename": "django-ws4ever-0.5.1.tar.gz", "has_sig": false, "md5_digest": "7bdc18832460ffbafb599af004089a11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11024, "upload_time": "2017-09-26T12:58:33", "url": "https://files.pythonhosted.org/packages/06/34/dcf2219e207c9c30d3f5364020a9440dd532338582a14dfdc20f6e454235/django-ws4ever-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7bdc18832460ffbafb599af004089a11", "sha256": "ca98dc29620ee7cadec34ca0db70cfe120bf6c6b58d0a36c14fe29e4a51b1902" }, "downloads": -1, "filename": "django-ws4ever-0.5.1.tar.gz", "has_sig": false, "md5_digest": "7bdc18832460ffbafb599af004089a11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11024, "upload_time": "2017-09-26T12:58:33", "url": "https://files.pythonhosted.org/packages/06/34/dcf2219e207c9c30d3f5364020a9440dd532338582a14dfdc20f6e454235/django-ws4ever-0.5.1.tar.gz" } ] }