我的目标是将Adafruit Feather(WiFi)连接到计算机上运行的Websocket服务器。
- 服务器:EventMachine Simple Server Example
- 客户端:ArduinoHttpClient> SimpleWebsocketExample
我的问题是,当我重置羽毛时,有时无法重新连接。在重新连接之前,我必须等待几分钟,进行一些额外的重置。打开服务器代码上的调试标志,我看到两种模式:
成功连接
[[:initialize]]
[[:receive_data,"GET /"]]
[[:receive_data," HTTP/1.1"]]
[[:receive_data,"\r\n"]]
[[:receive_data,"Host: "]]
[[:receive_data,"XXX:XXX:XX:XX"]] # masked for security,but the IP of my server
[[:receive_data,"443\r\n"]]
[[:receive_data,"User-Agent"]]
[[:receive_data,": "]]
[[:receive_data,"Arduino/2.2.0"]]
[[:receive_data,"Upgrade"]]
[[:receive_data,"websocket"]]
[[:receive_data,"Connection"]]
[[:receive_data,"Sec-WebSocket-Key"]]
[[:receive_data,"eGHyXdbEMgiCiR0cZEBRTQ=="]]
[[:receive_data,"\r\nSec-WebSocket-Version"]]
[[:receive_data,"13"]]
[[:receive_data,"\r\n\r\n"]]
[[:accepting_ws_version,13]]
[[:upgrade_response,"HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-accept: rUUq6+3qildLwg2c5CpgHfxTO1I=\r\n\r\n"]]
[[:sending_frame,:text,"{\"sender\":\"socket-server\",\"event\":\"connection_opened\",\"data\":{\"sid\":3,\"ip\":\"129.XXX.XXX.30\"}}"]]
# DEVICE CONNECTION ESTABLISHED
# FIRST MESSAGE FROM FEATHER
[[:receive_data,"\x81"]]
[[:receive_data,"\xB6"]]
[[:buffer_incomplete,"\x81\xB6"]]
[[:receive_data,"\xFC\xDE\xEB\xF1\x87\xFC\x85\x90\x91\xBB\xC9\xCB\xDE\xB0\x8E\x9E\x8C\xB7\x93\x94\x90\xFC\xC7\xD3\x8A\xBB\x99\x82\x95\xB1\x85\xD3\xC6\xFC\xDA\xDF\xCC\xFC\xC7\xD3\x99\xA8\x8E\x9F\x88\xFC\xD1\xD3\x9B\xAC\x8E\x94\x88\xB7\x85\x96\xDE\xA3"]]
[[:message_received,"{\"name\":\"neopixel\",\"version\":\"1.0\",\"event\":\"greeting\"}"]]
# Works great,no issues unless it gets disconnected...
失败的重新连接
# HIT RESET BUTTON HERE
[[:sending_frame,\"event\":\"connection_closed\",\"data\":{\"sid\":10,\"ip\":\"129.107.106.30\"}}"]]
# ATTEMPTING TO REOPEN
[[:initialize]]
[[:receive_data,"GET"]]
[[:receive_data," "]]
[[:receive_data,"/"]]
[[:receive_data,"XXX.XX.XX.XX"]]
[[:receive_data,":"]]
[[:receive_data,"443"]]
[[:receive_data,": websocket"]]
[[:receive_data,"0rubjGOZYAJM0YZ/cSboWw=="]]
[[:receive_data,"Sec-WebSocket-Version"]]
[[:receive_data,"\r\n"]]
[[:accepting_ws_version,"HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-accept: QP0lJhfU9wlSy4ZFesYTIVyj/ww=\r\n\r\n"]]
[[:sending_frame,\"data\":{\"sid\":12,\"ip\":\"129.XXX.XXX.30\"}}"]]
[[:receive_data,"{"]]
[[:receive_data,"\"n"]]
[[:buffer_incomplete,"{\"n"]]
[[:receive_data,"a"]]
[[:buffer_incomplete,"{\"na"]]
[[:receive_data,"m"]]
[[:buffer_incomplete,"{\"nam"]]
[[:receive_data,"e"]]
[[:buffer_incomplete,"{\"name"]]
[[:receive_data,"\""]]
[[:buffer_incomplete,"{\"name\""]]
[[:receive_data,":"]]
[[:buffer_incomplete,"{\"name\":"]]
[[:receive_data,"{\"name\":\""]]
[[:receive_data,"n"]]
[[:buffer_incomplete,"{\"name\":\"n"]]
[[:receive_data,"{\"name\":\"ne"]]
[[:receive_data,"o"]]
[[:buffer_incomplete,"{\"name\":\"neo"]]
[[:receive_data,"p"]]
[[:buffer_incomplete,"{\"name\":\"neop"]]
[[:receive_data,"i"]]
[[:buffer_incomplete,"{\"name\":\"neopi"]]
[[:receive_data,"x"]]
[[:buffer_incomplete,"{\"name\":\"neopix"]]
[[:receive_data,"{\"name\":\"neopixe"]]
[[:receive_data,"l\""]]
[[:buffer_incomplete,"{\"name\":\"neopixel\""]]
[[:receive_data,","]]
[[:buffer_incomplete,"]]
[[:receive_data,\""]]
[[:receive_data,"v"]]
[[:buffer_incomplete,\"v"]]
[[:receive_data,\"ve"]]
[[:receive_data,"r"]]
[[:buffer_incomplete,\"ver"]]
[[:receive_data,"s"]]
[[:buffer_incomplete,\"vers"]]
[[:receive_data,\"versi"]]
[[:receive_data,\"versio"]]
[[:receive_data,\"version"]]
[[:receive_data,\"version\""]]
[[:receive_data,\"version\":"]]
[[:receive_data,\"version\":\""]]
[[:receive_data,"1"]]
[[:buffer_incomplete,\"version\":\"1"]]
[[:receive_data,"."]]
[[:buffer_incomplete,\"version\":\"1."]]
[[:receive_data,"0"]]
[[:buffer_incomplete,\"version\":\"1.0"]]
[[:receive_data,\"version\":\"1.0\""]]
[[:receive_data,"\""]]
[[:error,#<EventMachine::WebSocket::WSProtocolError: Unknown opcode 11>]]
[[:sending_frame,:close,"\x03\xEAUnknown opcode 11"]]
[[:receive_data,"e"]]
[[:unbind,:connection]]
# :(
我在while循环中尝试进行Feather重新连接。我以为我的问题可能是与快速重新连接尝试中的数据超时/节流有关,但可惜情况并非如此。
关于如何诊断问题的想法?我将操作码视为潜在的罪魁祸首,但不确定是否要在服务器端抑制它或弄清楚为什么将其放在客户端。