在浏览器上使用WebSocket API时,我需要在握手开始时延迟。
服务器是Nucleo板(L476RG),带有防护罩IDW01M1。 客户端是Firefox v50.1
1。测试服务器
我制作了Python脚本来建立WebSocket连接。我注意到我需要先#34; Connect"到服务器。然后在延迟600ms后启动交换 我无法比这更快地运行我的服务器。请记住,这是一个业余爱好级别的MCU
2。测试客户端
我使用Python创建了一个本地服务器。我的Javascript客户端连接到它没有任何问题。
#!c:/Python27/python.exe -u
import socket
import time
TCP_IP = '172.24.220.1'
TCP_PORT = 3000
BUFFER_SIZE = 1024
#
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect first
connected = False
while not connected:
try:
s.connect((TCP_IP, TCP_PORT))
connected = True
except Exception as e:
pass
#------------------------------------
time.sleep(0.6)
#------------------------------------
# Send first bytes
s.send("Good-hi")
# Ping pong
data = s.recv(BUFFER_SIZE)
使用WebSocket库时,Python也会出现同样的问题
#!c:/Python27/python.exe -u
import time
import websocket
from websocket import create_connection
remote = "ws://172.24.220.1:3000"
websocket.enableTrace(True)
ws = websocket.WebSocket()
ws.connect(remote) #<------Need to add delay inside this method
print "WebSocket established"
ws.close()
这个page解释了WebSocket方法中发生的事情。 使用Python我可以打开没有任何握手的套接字(RAW Socket),然后通过手动发送标头来启动握手。 但是在浏览器中这是不可能的,因为我无法打开RAW套接字。 至少,到目前为止,这是我的理解。
摘要 ,有没有办法首先在客户端和服务器之间建立连接,然后随意启动握手?
答案 0 :(得分:0)
如果您在javascript中使用WebSockets api。
连接就绪时会触发onopen
事件。
你可以在其中添加setTimeout
来延迟发送第一个数据。
我不认为你可以延迟握手本身。
也许尝试将new Websocket
置于setTimeout
内,以确保在尝试开始连接之前已提供所有文件。