python websocketapp on_message()方法不起作用
Posted
技术标签:
【中文标题】python websocketapp on_message()方法不起作用【英文标题】:python websocketapp on_message() method not working 【发布时间】:2019-08-26 12:19:14 【问题描述】:我使用 python 从 nodejs 服务器接收流数据,使用以下 python 代码。 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格式传回。
【问题讨论】:
你能至少显示堆栈跟踪或解释器在运行此代码时抛出的错误吗? 你能链接你正在使用的 websocket 库吗? @Mobrine Hayde,没有错误。有一个日志说建立了连接,最远的是执行print('receiving message...')
,然后连接保持打开但没有任何反应。
@Tim Woocker,python 使用websocket
,nodejs 也使用websocket
【参考方案1】:
您的代码似乎调用了 WebsockeApp 类中的 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 websocketapp on_message()方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章
WebSocketApp 与 create_connection
ImportError:无法从“websocket”(/Users/raphaelhen/Desktop/websocket.py)导入名称“WebSocketApp”
SSL:尝试连接到 python3.7 中的 websocket 时出现 CERTIFICATE_VERIFY_FAILED