m0_57965808 2021-12-18 17:03 采纳率: 90.9%
浏览 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日

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名