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

您的位置:首頁技術文章
文章詳情頁

通過實例解析Python RPC實現原理及方法

瀏覽:102日期:2022-07-18 13:22:27

單線程同步

使用socket傳輸數據 使用json序列化消息體 struct將消息編碼為二進制字節串,進行網絡傳輸

消息協議

// 輸入{ in: 'ping', params: 'ireader 0'}// 輸出{ out: 'pong', result: 'ireader 0'}

客戶端 client.py

# coding: utf-8# client.pyimport jsonimport timeimport structimport socketdef rpc(sock, in_, params): response = json.dumps({'in': in_, 'params': params}) # 請求消息體 length_prefix = struct.pack('I', len(response)) # 請求長度前綴 sock.sendall(length_prefix) sock.sendall(response) length_prefix = sock.recv(4) # 響應長度前綴 length, = struct.unpack('I', length_prefix) body = sock.recv(length) # 響應消息體 response = json.loads(body) return response['out'], response['result'] # 返回響應類型和結果if __name__ == ’__main__’: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 8080)) for i in range(10): # 連續發送10個rpc請求 out, result = rpc(s, 'ping', 'ireader %d' % i) print out, result time.sleep(1) # 休眠1s,便于觀察 s.close() # 關閉連接

通過實例解析Python RPC實現原理及方法

服務端 blocking_single.py

# coding: utf8# blocking_single.pyimport jsonimport structimport socketdef handle_conn(conn, addr, handlers): print addr, 'comes' while True: # 循環讀寫 length_prefix = conn.recv(4) # 請求長度前綴 if not length_prefix: # 連接關閉了 print addr, 'bye' conn.close() break # 退出循環,處理下一個連接 length, = struct.unpack('I', length_prefix) body = conn.recv(length) # 請求消息體 request = json.loads(body) in_ = request[’in’] params = request[’params’] print in_, params handler = handlers[in_] # 查找請求處理器 handler(conn, params) # 處理請求def loop(sock, handlers): while True: conn, addr = sock.accept() # 接收連接 handle_conn(conn, addr, handlers) # 處理連接def ping(conn, params): send_result(conn, 'pong', params)def send_result(conn, out, result): response = json.dumps({'out': out, 'result': result}) # 響應消息體 length_prefix = struct.pack('I', len(response)) # 響應長度前綴 conn.sendall(length_prefix) conn.sendall(response)if __name__ == ’__main__’: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創建一個TCP套接字 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 打開reuse addr選項 sock.bind(('localhost', 8080)) # 綁定端口 sock.listen(1) # 監聽客戶端連接 handlers = { # 注冊請求處理器 'ping': ping } loop(sock, handlers) # 進入服務循環

通過實例解析Python RPC實現原理及方法

多線程同步

使用線程庫thread創建原生線程 服務器可并行處理多個客戶端

服務端 multithread.py

通過實例解析Python RPC實現原理及方法

多進程同步

Python的GIL導致單個進程只能占滿一個CPU核心,多線程無法利用多核優勢 os.fork()會生成子進程 子進程退出后,父進程需使用waitpid系統調用收割子進程,防止其稱為僵尸資源 在子進程中關閉服務器套接字后,在父進程中也要關閉服務器套接字 因為進程fork后,父子進程都有自己的套接字引用指向內核的同一份套接字對象,套接字引用計數為2,對套接字進程close,即將套接字對象的引用計數減1

PreForking同步

進程比線程耗費資源,通過PreForking進程池模型對服務器開辟的進程數量進行限制,避免服務器負載過重 如果并行的連接數量超過了prefork進程數量,后來的客戶端請求將會阻塞

單進程異步

通過事件輪詢API,查詢相關套接字是否有響應的讀寫事件,有則攜帶事件列表返回,沒有則阻塞 拿到讀寫事件后,可對事件相關的套接字進行讀寫操作 設置讀寫緩沖區 Nginx/Nodejs/Redis都是基于異步模型 異步模型編碼成本高,易出錯,通常在公司業務代碼中采用同步模型,僅在講究高并發高性能的場合才使用異步模型

PreForking異步

Tornado/Nginx采用了多進程PreForking異步模型,具有良好的高并發處理能力

通過實例解析Python RPC實現原理及方法

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 浙江自考_浙江自学考试网 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 最新范文网_实用的精品范文美文网 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 27PR跨境电商导航 | 专注外贸跨境电商| 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 联系我们-腾龙公司上分客服微信19116098882 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 深圳彩钢板_彩钢瓦_岩棉板_夹芯板_防火复合彩钢板_长鑫 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 破碎机锤头_耐磨锤头_合金锤头-鼎成机械一站式耐磨铸件定制服务 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 环球周刊网| 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 |