{"id":509,"date":"2020-11-03T00:11:20","date_gmt":"2020-11-02T16:11:20","guid":{"rendered":"https:\/\/whalefallnotes.blog\/?p=509"},"modified":"2024-10-29T00:55:35","modified_gmt":"2024-10-28T16:55:35","slug":"simple-multiplexing-in-python3","status":"publish","type":"post","link":"https:\/\/whalefallnotes.blog\/zh\/2020\/11\/03\/simple-multiplexing-in-python3\/","title":{"rendered":"Multiplexing in Python3"},"content":{"rendered":"\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>What is Multiplexing<\/strong> <strong>and De-multiplexing?<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"564\" data-permalink=\"https:\/\/whalefallnotes.blog\/zh\/multiplexing-3\/\" data-orig-file=\"https:\/\/i0.wp.com\/whalefallnotes.blog\/wp-content\/uploads\/2020\/11\/multiplexing-3.png?fit=841%2C421&amp;ssl=1\" data-orig-size=\"841,421\" data-comments-opened=\"1\" data-image-title=\"multiplexing-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/whalefallnotes.blog\/wp-content\/uploads\/2020\/11\/multiplexing-3.png?fit=841%2C421&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/whalefallnotes.blog\/wp-content\/uploads\/2020\/11\/multiplexing-3.png?resize=722%2C361&#038;ssl=1\" alt=\"\" class=\"wp-image-564\" width=\"722\" height=\"361\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Multiplexing is generally representing a concept of transferring multiple messages by the same road. By merging the slow road to a faster road, can efficiently bring advantage to the usage of the faster road. After the data has proceeded when the messages arrive at the destination server, we need to use De-multiplexing to the different sources. The advantage of multiplexing that includes saving the cost and efficiently use the resources for communication.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Server-side example<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nimport&nbsp;socket\nimport&nbsp;queue\nimport&nbsp;select\n\nbuffer&nbsp;=&nbsp;1024\navailable_connections&nbsp;=&nbsp;1000\nserver&nbsp;=&nbsp;socket.socket()\nserver.bind(('localhost',&nbsp;8888))\nserver.listen(available_connections)\nserver.setblocking(False)\nmessage_redirect&nbsp;=&nbsp;{}\ninputs&nbsp;=&nbsp;&#091;server,&nbsp;]\noutputs&nbsp;=&nbsp;&#091;]\n\n\ndef&nbsp;add_readable(readable):\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;buffer\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;inputs\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;outputs\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;server\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;message_redirect\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;r&nbsp;in&nbsp;readable:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;r&nbsp;is&nbsp;server:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn,&nbsp;addr&nbsp;=&nbsp;server.accept()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputs.append(conn)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message_redirect&#091;conn]&nbsp;=&nbsp;queue.Queue()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;r.recv(buffer)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message_redirect&#091;r].put(data)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputs.append(r)\n\n\ndef&nbsp;add_writable(writeable):\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;outputs\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;message_redirect\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;w&nbsp;in&nbsp;writeable:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data_to_client&nbsp;=&nbsp;message_redirect&#091;w].get()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w.send(data_to_client)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputs.remove(w)\n\n\ndef&nbsp;exception_handler():\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;inputs\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;outputs\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;message_redirect\n&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;e&nbsp;in&nbsp;exceptional:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;e&nbsp;in&nbsp;outputs:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputs.remove(e)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inputs.remove(e)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;del&nbsp;message_redirect&#091;e]\n\n\nwhile&nbsp;True:\n&nbsp;&nbsp;&nbsp;&nbsp;readable,&nbsp;writeable,&nbsp;exceptional&nbsp;=&nbsp;select.select(inputs,&nbsp;outputs,&nbsp;inputs)\n&nbsp;&nbsp;&nbsp;&nbsp;add_readable(readable)\n&nbsp;&nbsp;&nbsp;&nbsp;add_writable(writeable)\n&nbsp;&nbsp;&nbsp;&nbsp;exception_handler()\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Client-side example (Test client)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nimport&nbsp;socket\nimport&nbsp;time\nimport&nbsp;socket\nimport&nbsp;sys\n\nbuffer&nbsp;=&nbsp;1024\nhost&nbsp;=&nbsp;'127.0.0.1'\nport&nbsp;=&nbsp;8888\n\n\ndef&nbsp;send_msg(sock):\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;buffer\n&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;True:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sock.send(bytes(str.encode('test')))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;sock.recv(buffer)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(msg.decode('utf-8'))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(2)\n\n\ndef&nbsp;main():\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;host\n&nbsp;&nbsp;&nbsp;&nbsp;<em>global<\/em>&nbsp;port\n&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;socket.socket(socket.AF_INET,&nbsp;socket.SOCK_STREAM)&nbsp;as&nbsp;sock:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sock.connect((host,&nbsp;port))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_msg(sock)\n\n\nif&nbsp;__name__&nbsp;==&nbsp;\"__main__\":\n&nbsp;&nbsp;&nbsp;&nbsp;main()\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Simple multiplexing example in Python3 <\/p>\n","protected":false},"author":193014733,"featured_media":564,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[775599553],"tags":[],"class_list":["post-509","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category--programming-and-algorithms"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pcmYUB-8d","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/whalefallnotes.blog\/wp-content\/uploads\/2020\/11\/multiplexing-3.png?fit=841%2C421&ssl=1","_links":{"self":[{"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/posts\/509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/users\/193014733"}],"replies":[{"embeddable":true,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/comments?post=509"}],"version-history":[{"count":17,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/posts\/509\/revisions"}],"predecessor-version":[{"id":608,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/posts\/509\/revisions\/608"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/media\/564"}],"wp:attachment":[{"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/media?parent=509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/categories?post=509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/whalefallnotes.blog\/zh\/wp-json\/wp\/v2\/tags?post=509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}