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接口)都是有退出机制的, 会告诉你什么时候结束,或者你接收到想要的结果自己退出

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

  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/Tester_Dolores/p/14786502.html
Copyright © 2011-2022 走看看