Javascript WebSocket - 需要更多延迟

时间:2017-01-06 17:28:22

标签: javascript python websocket stm32

在浏览器上使用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套接字。 至少,到目前为止,这是我的理解。

摘要 ,有没有办法首先在客户端和服务器之间建立连接,然后随意启动握手?

1 个答案:

答案 0 :(得分:0)

如果您在javascript中使用WebSockets api。

连接就绪时会触发onopen事件。 你可以在其中添加setTimeout来延迟发送第一个数据。

我不认为你可以延迟握手本身。

也许尝试将new Websocket置于setTimeout内,以确保在尝试开始连接之前已提供所有文件。

更多信息: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications