2017-01-06 2 views
0

Мне нужно задержать, когда рукопожатие начинается при использовании API-интерфейса WebSocket в браузере.Javascript WebSocket - требуется дополнительная задержка

Сервер представляет собой плату Nucleo (L476RG) с экраном wifi IDW01M1. Клиент Firefox v50.1

1. Тестирование сервера

Я сделал скрипты Python, чтобы установить соединение WebSocket. Я заметил, что мне нужно сначала «Подключиться» к серверу. Затем инициируйте обмен после задержки 600 мс Я не могу запустить свой сервер быстрее, чем это. Помните, что это хобби уровня 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) 

же проблема возникает с Python также при использовании библиотеки WebSocket

#!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

Вы можете разместить код вами Python Client пожалуйста. : D –

+0

@PhilPoore сделано. Я должен упомянуть об этом: я не использовал библиотеку «websocket» на py, потому что у нее такая же проблема, рукопожатие происходит слишком быстро. – daarthvader

+0

hmmm .... im confused, у вас есть 600 мс задержки в коде выше. - код, который требует замедления? –

ответ

0

Если вы используете Websockets api в javascript.

Событие onopen, которое активируется при подключении. , вы можете поместить в него setTimeout, чтобы отложить отправку первых данных.

Я не думаю, что вы можете отложить рукопожатие.

Возможно, попробуйте поставить new Websocket внутри setTimeout, чтобы убедиться, что все файлы были поданы до начала подключения.

подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications

+0

спасибо. onopen никогда не вызывается: поскольку после вызова нового Websocket он отправляет заголовки и ждет ответа от сервера.проблема в том, что сервер еще не готов, поэтому полностью пропускает передачу. Включение нового WebSocket в таймаут не делает ничего. Мне нужно контролировать, когда заголовки отправляются «новым WebSocket», – daarthvader

Смежные вопросы