电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python Websocket服務(wù)端通信的使用示例

瀏覽:2日期:2022-08-06 14:45:23

1、嘮嘮叨叨

最近又回顧了下Websocket,發(fā)現(xiàn)已經(jīng)忘的七七八八了。于是用js寫了客戶端,用python寫了服務(wù)端,來(lái)復(fù)習(xí)一下這方面的知識(shí)。

WebSocket 是一種標(biāo)準(zhǔn)協(xié)議,用于在客戶端和服務(wù)端之間進(jìn)行雙向數(shù)據(jù)傳輸。但它跟 HTTP 沒(méi)什么關(guān)系,它是基于 TCP 的一種獨(dú)立實(shí)現(xiàn)。

以前客戶端想知道服務(wù)端的處理進(jìn)度,要不停地使用 Ajax 進(jìn)行輪詢,讓瀏覽器隔個(gè)幾秒就向服務(wù)器發(fā)一次請(qǐng)求,這對(duì)服務(wù)器壓力較大。另外一種輪詢就是采用 long poll 的方式,這就跟打電話差不多,沒(méi)收到消息就一直不掛電話,也就是說(shuō),客戶端發(fā)起連接后,如果沒(méi)消息,就一直不返回 Response 給客戶端,連接階段一直是阻塞的。

而 WebSocket 解決了 HTTP 的這幾個(gè)難題。當(dāng)服務(wù)器完成協(xié)議升級(jí)后( HTTP -> WebSocket ),服務(wù)端可以主動(dòng)推送信息給客戶端,解決了輪詢?cè)斐傻耐窖舆t問(wèn)題。由于 WebSocket 只需要一次 HTTP 握手,服務(wù)端就能一直與客戶端保持通信,直到關(guān)閉連接,這樣就解決了服務(wù)器需要反復(fù)解析 HTTP 協(xié)議,減少了資源的開(kāi)銷。

2、先看一下效果吧

2.1、效果1(一個(gè)客戶端連上服務(wù)的并發(fā)送消息)

Python Websocket服務(wù)端通信的使用示例

2.2、效果2(另一個(gè)客戶端連上服務(wù)的并發(fā)送消息)

Python Websocket服務(wù)端通信的使用示例

2.3、效果3(服務(wù)的收到客戶端的全部消息并返回消息)

Python Websocket服務(wù)端通信的使用示例

2.4、效果4(一個(gè)客戶端掉線并不影響其它socket連接)

Python Websocket服務(wù)端通信的使用示例

2.5、效果5(列取全部連接客戶端對(duì)象和當(dāng)前發(fā)消息的客戶端對(duì)象)

Python Websocket服務(wù)端通信的使用示例

3、核心代碼

3.1、Python

#! -*- coding: utf-8 -*-'''Author: ZhenYuShaCreate Time: 2019-1-14Info: Websocket 的使用示例'''import asyncioimport websocketswebsocket_users = set()# 檢測(cè)客戶端權(quán)限,用戶名密碼通過(guò)才能退出循環(huán)async def check_user_permit(websocket): print('new websocket_users:', websocket) websocket_users.add(websocket) print('websocket_users list:', websocket_users) while True: recv_str = await websocket.recv() cred_dict = recv_str.split(':') if cred_dict[0] == 'admin' and cred_dict[1] == '123456': response_str = 'Congratulation, you have connect with server...' await websocket.send(response_str) print('Password is ok...') return True else: response_str = 'Sorry, please input the username or password...' print('Password is wrong...') await websocket.send(response_str)# 接收客戶端消息并處理,這里只是簡(jiǎn)單把客戶端發(fā)來(lái)的返回回去async def recv_user_msg(websocket): while True: recv_text = await websocket.recv() print('recv_text:', websocket.pong, recv_text) response_text = f'Server return: {recv_text}' print('response_text:', response_text) await websocket.send(response_text)# 服務(wù)器端主邏輯async def run(websocket, path): while True: try: await check_user_permit(websocket) await recv_user_msg(websocket) except websockets.ConnectionClosed: print('ConnectionClosed...', path) # 鏈接斷開(kāi) print('websocket_users old:', websocket_users) websocket_users.remove(websocket) print('websocket_users new:', websocket_users) break except websockets.InvalidState: print('InvalidState...') # 無(wú)效狀態(tài) break except Exception as e: print('Exception:', e)if __name__ == ’__main__’: print('127.0.0.1:8181 websocket...') asyncio.get_event_loop().run_until_complete(websockets.serve(run, '127.0.0.1', 8181)) asyncio.get_event_loop().run_forever()

3.2、Html(JS)

<script> var socket; if ('WebSocket' in window) { var ws = new WebSocket('ws://127.0.0.1:8181/test'); socket = ws; ws.onopen = function() { console.log(’連接成功’); alert('連接成功, 請(qǐng)輸入賬號(hào)和密碼'); }; ws.onmessage = function(evt) { var received_msg = evt.data; document.getElementById('showMes').value+=received_msg+'n'; }; ws.onclose = function() { alert('斷開(kāi)了連接'); }; } else { alert('瀏覽器不支持WebSocket'); } function sendMeg(){ var message=document.getElementById('name').value+':'+document.getElementById('mes').value; document.getElementById('showMes').value+=message+'nn'; socket.send(message); } </script>

4、Github源碼分享

https://github.com/ShaShiDiZhuanLan/Demo_Socket_Python

到此這篇關(guān)于Python Websocket服務(wù)端通信的使用示例的文章就介紹到這了,更多相關(guān)Python Websocket服務(wù)端通信內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 风信子发稿-专注为企业提供全球新闻稿发布服务 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 螺杆泵_中成泵业| 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 杭州双螺杆挤出机-百科| 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 壹作文_中小学生优秀满分作文大全|