[发明专利]基于twisted框架的脑电波数据传输的服务器有效
申请号: | 201711478864.4 | 申请日: | 2017-12-29 |
公开(公告)号: | CN108337292B | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 王亢;周国民;李国军 | 申请(专利权)人: | 浙江警察学院 |
主分类号: | H04L29/08 | 分类号: | H04L29/08;H04L29/06 |
代理公司: | 杭州斯可睿专利事务所有限公司 33241 | 代理人: | 王利强 |
地址: | 310053 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 twisted 框架 脑电波 数据传输 服务器 | ||
1.一种基于twisted框架的脑电波数据传输的服务器,其特征在于:所述服务器为一种传输、转发、保存脑电波数据的服务器端,所述服务端包括通信模块、脑电波数据解析模块与数据库模块;
所述通信模块中实例化两个工厂对象为DevFactory和UserFactory,分别用于管理设备DevProtocol、用户UserProtocol与服务器之间的通信协议;DevProtocol协议实现设备的登录与注销、上报数据的解析、一条完整记录的数据库保存、以及向相关联的在线用户转发经过解析之后的数据;UserProtocol协议实现用户的登录与注销、解析用户下发的命令、以及非阻塞地执行相应的命令;
用户与设备之间是多对多的关系,为了实现DevProtocol和UserProtocol两个协议之间能够实时获取对方在线状态和相互通信,设置了两个字典:user_dev_priv和dev_user_priv,user_dev_priv保存的是某个用户ID号为key、以有控制权限的在线设备DevProtocol实例列表为value的字典,也即{userid1:[设备实例1,...],…,useridx:[设备实例1,...]},类似地,dev_user_priv保存的是某个设备ID号为key、与其相关联的用户UserProtocol实例列表为value的字典,也即{devid1:[用户实例1,...],…,devidy:[用户实例1,...]},当设备连接成功或者断开时,DevProtocol协议调用updateonlinedevice()函数,查询数据库,得到与该设备相关联的所有用户,然后在user_dev_priv字典中,添加/删除该设备的DevProtocol实例;当用户登录/注销时,调用updateonlieuser()函数,查询数据库,得到与该用户相关联的所有设备,然后在dev_user_priv字典中,添加/删除UserProtocol实例,因此,设备的DevProtocol协议中,只要通过getonlineuser()函数,查询dev_user_priv字典,就得到与该设备关联的所有在线用户,以便设备转发脑电波数据;用户UserProtocol协议调用getonlinedevice()函数,查询user_dev_priv字典,获得当前有控制权限的所有在线设备,实现对在线设备的控制和查询;
所述服务器接收到设备上发的脑电波数据后,触发DevProtocol协议中的dataReceived()事件,该事件处理包括了设备合法性认证、数据解析、解析后的完整记录保存到数据库的历史数据表中以及向有控制权限的在线用户转发数据;
脑电波数据解析是在protoTrans模块中完成的,当设备与服务器建立连接之后,设备上发的数据,在DevProtocol协议中,调用protoTrans模块中的NeuroData()函数来解析数据;接口函数protoTrans.NeuroData()以Python字符串为输入参数,利用PyArg_ParseTuple()函数,把Python字符串转换为C语言字符串;调用parseNeuroPacket()对以字符串给出的数据报文,按照规定的协议进行解析;解析之后的数据,利用Py_BuildValue()函数,构造{key:value}字典,返回到Python程序中,数据解析模块采用Python提供的distutils工具来生成相应的动态库文件;
所述服务器接收到用户上发的带/不带参数命令的TCP报文,触发UserProtocol协议中的dataReceived()事件,该事件处理包括用户合法性认证、命令解析和执行命令;
如果接收到的命令和参数是合法的,则直接执行;如果是非法的或者参数有误,则返回错误信息;如果是查询历史数据等需要花费很长时间的命令,则采用从twisted.internet.threads导入deferToThread()函数,转换成线程在后台运行,避免UserProtocol协议的阻塞;
数据库利用对象映射sqlalchemy进行操作,数据库中的表或者表中的一条记录就可以直接通过sqlalchemy操作类或者类实例来完成,通过ORM中工具sqlalchemy,就可以实现对数据库添加、删除和查询;
DevProtocol协议中调用数据库db模块中函数auth_dev_history()把解析后的记录插入到数据库历史数据表中,每条记录包括了以mediumint字段定义的各个统计参数和以Blob字段定义的原始波形数据,其中各个统计参数以“insert into”的方式一次性插入到历史数据表中,此时Blob字段为空,然后这条记录中的原始波形数据,以“update”的方式刷新刚才“insert into”记录中的Blob字段;此时记录写到到数据库缓存内,每隔一定时间,调用MySQLdb的commit()函数,把缓存中的记录,真正写入到数据库中。
2.如权利要求1所述的基于twisted框架的脑电波数据传输的服务器,其特征在于:DevProtocol和UserProtocol协议启动后,开启超时定时器,设备/用户的每次dataReceived()事件会重新刷新超时定时器,当长时间没有刷新超时定时器,则认为设备/用户以及断开,软件自动触发connetionLost事件,断开TCP连接。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江警察学院,未经浙江警察学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711478864.4/1.html,转载请声明来源钻瓜专利网。