[Python]WebSocket Client实作

前言

客户的需求真是千奇百怪,今天遇到了需要将树梅派(RaspberryPi)的GPIO讯号传到Python应用程式做整合应用的需求,思考一下应该是要好好地挑选一个全双工的网路通讯结构去套用,突然脑中闪过websocket,那个早在2011年就已经被标準化,直到HTML5支援Websocket开放原生方法,才逐渐在Web界被广泛应用的websocket阿,于是就先透过nodejs架一个websocket server放在树梅派,负责接收GPIO讯号并利用websocket广播,然后python应用程式写一个websocket client就可以接收拉,这篇就简单介绍并笔记一下,怎么实作python的websocket client,不难,套件而已。

安装websocket-client for python套件

我们就是站在巨人的肩膀上写系统,所以我们使用日本大神前辈的套件,先pip一下

> pip install websocket-client

产生websocket的连线

直接将websocket的网址,传入物件里面,就会开始尝试连线,这边可以一起传入各种事件触发时候要执行的function,或是稍后再指定也是可以的

from websocket import enableTrace, WebSocketApp# 取物件的时候就直接指定事件方法ws = WebSocketApp(    "ws://localhost:9453",    on_message=MessageFunc,    on_error=ErrorFunc,    on_close=CloseFunc)# 取完物件再指定事件方法ws.on_open = OpenFunc

这几种事件触发的时机,分别如下:

on_open:开启连线成功时执行on_message:收到来自server端传来的讯息时执行on_error:连线发生错误时执行on_close:关闭连线时执行

接着,启动连线

ws.run_forever()

最后,当websocket用完的时候,很重要的动作就是要关闭,以免佔用server端太多连线,造成server端的负荷

ws.close()ws = None

在笔者整合应用的例子中,我会在on_message的时候,等收到来自server端传来,哪一个GPIO pin脚有反应,就同步显示在python应用程式的画面上,可以得知哪一个地方的电灯被打开,或是哪一扇门被打开,达到一种远端管理与控制的作用,笔者觉得如果有这类单纯讯号网路传递的需求,用websocket是最简单便利的方式了。

另外,套件作者还有SSL与proxy机制的设计,笔者暂时没有用到,有兴趣的朋友可以参考他的github文件喔

https://github.com/websocket-client/websocket-client


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章