m0_57965808 2021-12-18 17:03 采纳率: 91.2%
浏览 20
已结题

websocket的一段代码不明白什么意思和其作用

问题遇到的现象和发生背景

在CSDN看到一篇文章,但是因为本人才疏学浅导致对某些内容感到难以理解。向作者求问后作者也尚未得到答复。故来此请教。文章地址为:https://blog.csdn.net/as604049322/article/details/113101504
我不明白的代码部分为:Python的websocket同步客户端部分。问题有三个:
1 怎么判断服务端是否发送消息或连接已经建立呢?
2 12行至14行的代码该怎么理解
3 32行至39行的代码该怎么理解

问题相关代码,请勿粘贴截图
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 创建时间:2021/1/24 17:06
__author__ = 'xiaoxiaoming'

import time

import websocket
import _thread


# 在接收到服务器发送消息时调用
def on_message(ws, message):
    print('Received: ' + message)


# 在和服务器建立完成连接时调用
def on_open(ws):
    # 线程运行函数
    def process():
        while True:
            s = input("要发送的内容(quit表示退出):")
            if s == "quit":
                break
            ws.send(s)
            # 休息 0.2 秒先接收服务器回复的消息
            time.sleep(0.2)
        # 关闭 Websocket 的连接
        ws.close()
        print("Websocket closed")

    # 在另一个线程运行 gao() 函数
    _thread.start_new_thread(process, ())


if __name__ == "__main__":
    ws = websocket.WebSocketApp("ws://127.0.0.1:8000/",
                                on_message=on_message,
                                on_open=on_open)

    ws.run_forever()


  • 写回答

1条回答 默认 最新

  • 陈年椰子 2021-12-19 21:06
    关注

    1 怎么判断服务端是否发送消息或连接已经建立呢?
    从目前的客户端代码, 无法判断服务端是否发送消息, 只能是建立连接后,收到服务器端的消息,才知道服务器端给了消息。
    至于连接建立, 如果建立超时失败
    ws = websocket.WebSocketApp 那行,会返回一个无法建立连接消息

    2 12行至14行的代码该怎么理解
    定义收到服务器消息的动作, 你可以修改为
    def on_message(ws, message):
    print('收到服务器消息啦: ' + message)

    这个函数调用在 websocket.WebSocketApp 那里做了指向

    3 32行至39行的代码该怎么理解

    33行是 on_open 的函数内容

    36 - 39 就是 当运行这个文件时,不是直接import 这个文件, 则
    执行 两行代码
    1是建立一个 websocket.WebSocketApp
    2是让这个对象一直运行 run_forever()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载