zoukankan      html  css  js  c++  java
  • websocket-client 试用简记

    尝试重写WebSocketApp

    按照个人理解,某些处理是共用的,因此定义ws默认的on_error,on_close,on_ping,on_pong
    就目前使用on_message,on_open所作的处理可能会有不同。

    class MyWebsocket(websocket.WebSocketApp):
    	url="ws://" # websocket url
    	def on_error(mw, error):
    	    print(error)
    	    print("!!!!!!!!!发生未知错误!!!!!!!!!
    关闭连接........
    ")
    	    mw.close()
    
    	def on_close(mw):
    		print("===== closed =======
    ")
    
    	def on_ping(mw,message):
    	    print("Got a Ping:")
    	    print(message)
    
    	def on_pong(mw,message):
    	    print("Got a Pong:")
    	    print(message)
    
    	def on_data(ws,message,datatype,continueflag):
    		print ("D >>> "+str(len(message))+" "+message)
    
    	def __init__(self,url=url,on_error=on_error,on_close=on_close,on_pong=on_pong,on_ping=on_ping, header=None,
    		on_open=None, on_message=None,
    		on_cont_message=None,
    		keep_running=True, get_mask_key=None, cookie=None,
      		subprotocols=None,
    		on_data=on_data,is_connect=0,is_sendwav=0,user_id = ""):
    		websocket.WebSocketApp.__init__(self, url,on_error=on_error,on_close=on_close,on_pong=on_pong,on_ping=on_ping, header=None,
    		on_open=None, on_message=None,
    		on_cont_message=None,
    		keep_running=True, get_mask_key=None, cookie=None,
      		subprotocols=None,
    		on_data=on_data)
    		self.on_message=on_message
    		self.on_open=on_open
    		self.is_connect = is_connect
    		self.is_sendwav = is_sendwav
    		self.user_id = user_id
    
    

    试用:

    mywebsocket = MyWebsocket(on_open=on_open,on_message=on_message)
    mywebsocket.run_forever(ping_interval=60,ping_timeout=30)
    

    Option

    设置超时连接

    websocket.setdefaulttimeout(5)

    enabletrace

    websocket.enableTrace(True)

    发送文本和binary

    json格式

    def send_json(ws,data,operateName="test"):
    	print("
    【"+operateName+"】")
    	ws.send(json.dumps(data))
    	pprint(data)
    	set_waiting()
    

    试用:

    data={
    			"user_id":"123",
    			"user_name": "dolores"
    		}
    send_json(mywebsocket,data)
    

    wav

    def sendWAV(wav):
    		print("============开始发送音频数据==================")
    		step = 3200
    		with open(wav, 'rb') as f:
    			while True:
    				read_data = f.read(step)
    				if read_data:
    					self.mywebsocket.send(read_data, ABNF.OPCODE_BINARY)
    				if len(read_data) < step:
    					break
    				set_waiting(0.1)
    		print("============结束发送音频数据================")
    		set_waiting(10)
    
    sendWAV("./test.wav")
    

    ==================2021-05-20 修改 ========================
    阴差阳错之下发现了python 自带的wave库.....

    import wave
    def sendWAV(self,wav):
    		print("============开始发送音频数据==================")
    		step = 1600 
    		with wave.open(wav, 'rb') as f:
    			while True:
    				read_data = f.readframes(step)
    				if read_data:
    					self.mywebsocket.send(read_data, ABNF.OPCODE_BINARY)
    				if len(read_data) < step:
    					break
    				set_waiting(0.1)
    		print("============结束发送音频数据================")
    		set_waiting(15)
    

    接收服务器消息

    on_message

    def on_message(ws, message):
    	print("【server message】
    "+message)
      # 服务端返回的是字符串,可按需转成json格式
    	message = json.loads(message)
      print(message["id"])
    

    on_data

    def on_data(ws,message,datatype,continueflag):
      print ("D >>> "+str(len(message))+" "+message)
    

    问题

    在实际使用时经常出现的问题就是

    1. connection close(没有 连接成功 即关闭) ,这时候一般是 url或参数有问题
    2. connection refuse(也是没有连接成功 被拒绝了) ,这时候一般是url错误
      e....是否连接成功怎么看,进入on_open一般就是连接成功了
    3. 如果你已经发送了数据,但是服务器就是没有给你你想要的相应结果,一般是发送的数据格式有问题,确认下自己发送的格式是否和接口文档描述一致~
    4. 连接成功 但是报错 error ,这种时候, 有很多种情况.......a. 服务端不稳定 b. 根据error msg 一般能获得解决方案的....
    5. 之前都好好的....突然不行了.....那肯定是服务端有问题! 我觉得这个不需要怀疑吧~
    6. 怎么关闭ws连接??? 一般来说,不耍流氓的接口(我测试的都是ASR接口)都是有退出机制的, 会告诉你什么时候结束,或者你接收到想要的结果自己退出

    上面的内容,主要还是一些知识点整理和个人的一些思考,权当参考,如有错误或者更好的建议,可以在评论区指正,不胜感激!

  • 相关阅读:
    telnet c# 执行命令
    C# Windows服务安装、卸载批处理代码
    数据库高人 邹健 博客链接
    HDOJ_1232 并查集 畅通工程
    poj3461 KMP 小结
    HDOJ_2094 寻找冠军 set的简单应用
    HDOJ_1272 小希的迷宫 并查
    HDOJ_2754 素数种类统计
    linux下的jsp
    mysql
  • 原文地址:https://www.cnblogs.com/Tester_Dolores/p/14786502.html
Copyright © 2011-2022 走看看