python websocketapp on_message()方法不起作用 - python

我使用python通过以下python代码从nodejs服务器接收流数据。
Websocket假定获取实时流数据。而且我认为python的WebSocketApp获取流数据的唯一方法是通过on_message()。

但是,尽管可以成功建立连接,但永远不会调用on_message()。 on_open()仍被调用,并且ping消息已定期发送到服务器以维持心跳。

我通过互联网搜索,无法找到导致on_message()失败的线索?

我在本地和远程测试了连接,连接很好。

import websocket
from websocket import create_connection


import json
try:
    import thread
except ImportError:
    import _thread as thread
import time

def on_message(ws, message):
    print('on msg called')
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    time.sleep(1)
    ws.close()
    print("### closed ###")


def on_open(ws):
    def run(*args):
        time.sleep(1)
        print('sending from run()...')
        ws.send("{\"login\":\"login\",\"password\":\"pw\"}")
        time.sleep(1)

        try:
            print('receiving message...')
            #result =  json.loads(ws.receive())
            #result = ws.recv_frame()
            #result = json.loads(ws.recv())
            #print(result)
        except Exception as e:
            print('failed to receive messages...')
            print(e)
            time.sleep(1)
            ws.close()        

    thread.start_new_thread(run, ())


if __name__ == "__main__":
    try:
        websocket.enableTrace(True)         # show the header part 
        ws = websocket.WebSocketApp("ws://localhost:4010",
                                  subprotocols=["echo-protocol"],
                                  on_message = on_message,
                                  on_error = on_error,
                                  on_close = on_close)
        ws.on_open = on_open
        ws.run_forever(ping_interval=0,ping_timeout=0)
    except KeyboardInterrupt:
        ws.close()

据认为,一旦成功检索,信息将以json格式传回。

参考方案

似乎在您的代码中,将调用类WebsockeApp内部的on_message,而不是您的代码中包含的on_message。要在代码中运行on_message,只需在代码内创建一个自己的类,然后将对象创建更改为

从:

on_message = on_message

至:

ws = websocket.WebSocketApp("ws://localhost:4010", subprotocols=["echo-protocol"], on_message = YourClassName.on_message, on_error = on_error, on_close = on_close)

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:在不更改段落顺序的情况下在文件的每个段落中反向单词? - python

我想通过反转text_in.txt文件中的单词来生成text_out.txt文件,如下所示:text_in.txt具有两段,如下所示:Hello world, I am Here. I am eighteen years old. text_out.txt应该是这样的:Here. am I world, Hello old. years eighteen a…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…