文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python websocket cli

2023-01-31 05:28

关注
from tornado.websocket import websocket_connect
from tornado.gen import coroutine, sleep


import logging
import logging.handlers
import json
from tornado.ioloop import IOLoop


__author__ = "Ennis"
SERVER_URL = "ws://192.168.1.208:7600/box/reader-"


def init_logging():
    """
    日志文件设置,每天切换一个日志文件
    :return:
    """
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)


    sh = logging.StreamHandler()
    file_log = logging.handlers.TimedRotatingFileHandler('scooter_notify.log', 'MIDNIGHT', 1, 0)
    formatter = logging.Formatter(
        '[%(asctime)s] [%(levelname)-7s] [%(module)s:%(filename)s-%(funcName)s-%(lineno)d] %(message)s')
    sh.setFormatter(formatter)
    file_log.setFormatter(formatter)


    logger.addHandler(sh)
    logger.addHandler(file_log)


    logging.info("Current log level is : %s", logging.getLevelName(logger.getEffectiveLevel()))


class Communicator:
    """
    负责与服务端交互,维持链路连接


    """
    close_door_timer = None


    def __init__(self):
        self._websocket_client = None


    @coroutine
    def on_recv_msg(self, message):
        try:
            if message is None:
                logging.info("web socket connection have disconnect, reconnect")
                yield self.on_websocket_close()
                return


            logging.info("receive message = %s", message)


        except Exception as err_info:
            logging.error("handle websocket message failed:%s", err_info)


    @coroutine
    def on_websocket_close(self):
        while True:
            try:
                self._websocket_client = None
                yield sleep(1)
                self._websocket_client = yield websocket_connect(SERVER_URL, on_message_callback=self.on_recv_msg)
                break


            except Exception as err_info:
                print(err_info)
                continue
        logging.info("connect server success:%s", SERVER_URL)


    @coroutine
    def start(self):
        """


        :return:
        """
        try:
            websocket_connect(SERVER_URL, on_message_callback=self.on_recv_msg)
            self._websocket_client = yield websocket_connect(SERVER_URL, on_message_callback=self.on_recv_msg)
            logging.info("connect server success:%s", SERVER_URL)


        except Exception as err_info:
            logging.error("start device controller failed: %s", err_info)
            yield self.on_recv_msg(None)


    @coroutine
    def send_data(self, data):
        try:
            logging.info("will post device central :%s", data)
            if self._websocket_client is None:
                return False


            self._websocket_client.write_message(data)
            return True


        except Exception as err_info:
            logging.error("send dat to service failed: %s", err_info)

            return False


websocket客户端,声明该类对象后,调用start函数,在调用 IOLoop.instance().start()之后生效

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯