WebSocket(wss)
Он стал неотъемлемой частью современной веб-разработки, обеспечивая двустороннюю связь между клиентом и сервером в режиме реального времени. тест WebSocket
Совместное использование имеет важное значение для обеспечения его надежности, безопасности и производительности. В этом руководстве мы обсудим использование Postman и Python
Как протестировать WebSocket(wss)
。Python 3.x
Postman
Postman
Postman
Это мощный API Разработано для упрощения и ускорения API Процесс создания и отладки. Помимо традиционных HTTP Запрос на внешний тест,Postman
Также поддерживает WebSocket
протокол, чтобы разработчики могли легко отлаживать WebSocket
соединять。Postman 8.0
Начиная с версии, пользователи могут использовать Postman
тести Отладка WebSocket
соединять。wss://ws.dyhjw.com/?token=
{
"cmd": "sub",
"codes": [
"AUTD",
"XAU"
]
}
Unexpected server response: 200
)header Добавить cookie
и так далее, иначе можно вернуться 200 код состоянияPython
соединятьimport asyncio
import time
import websockets
class WebSocketClient:
def __init__(self, uri, auth_cookie):
self.uri = uri
self.auth_cookie = auth_cookie
self.websocket = None
async def connect(self):
self.websocket = await websockets.connect(self.uri, extra_headers={"Cookie": self.auth_cookie})
async def subscribe(self, topic):
if self.websocket:
await self.websocket.send(
build_message("SUBSCRIBE", {"id": "sub-0", "destination": topic}))
async def send_message(self, message):
if self.websocket:
await self.websocket.send(message)
async def receive_message(self):
if self.websocket:
response = await self.websocket.recv()
return response
async def send_heartbeat(self):
while True:
await asyncio.sleep(5) # Отправляйте сообщение об обнаружении пульса каждые 5 секунд.
if self.websocket:
await self.websocket.send(build_message("SEND", ''))
print(f"Пульс успешно отправлен -------")
# Определите содержимое сообщения в соответствии с форматом сообщения
def build_message(command, headers, msg=None):
BYTE = {
'LF': '\x0A',
'NULL': '\x00',
'HIDDEN': '\u0001'
}
data_arr = [command + BYTE['LF']]
# add headers
for key in headers:
data_arr.append(key + ":" + headers[key] + BYTE['LF'])
data_arr.append(BYTE['LF'])
# add message, if any
if msg is not None:
data_arr.append(msg)
# terminate with null octet
data_arr.append(BYTE['NULL'])
frame = ''.join(data_arr)
# transmit over ws
print("Данные после построения:" + frame)
return frame
async def main():
uri = "wss://xxxxx"
# Добавить аутентификацию разрешений
auth_cookie = ("xxxxx")
topics = ["/topic/xxxxx"]
client = WebSocketClient(uri, auth_cookie)
await client.connect()
# connect message
await client.send_message(
build_message("CONNECT", {"passcode": "", "accept-version": "1.0,1.1,1.2", "heart-beat": "5000,0"}))
# Запустите задачу обнаружения пульса, иначе сервер автоматически отключит соединение.
asyncio.create_task(client.send_heartbeat())
time.sleep(2)
for topic in topics:
await client.subscribe(topic)
print(f"{topic} Подписка прошла успешно")
while True:
print("Ожидание получения сообщения------")
response = await client.receive_message()
print(f"Получено сообщение: {ответ}")
asyncio.run(main())
import threading
import time
import websocket
# адрес доступа к сокету:
socket_add = 'wss://xxxx'
def on_message(ws, message):
print(f"Получено сообщение: {message}")
def on_error(ws, error):
# Когда программа сообщает об ошибке, срабатывает событие on_error.
print(error)
def on_close(ws, param1, param2):
print("Connection closed------")
def on_open(ws):
ws.send(build_message("CONNECT", {"passcode": "", "accept-version": "1.0,1.1,1.2", "heart-beat": "5000,0"}))
time.sleep(2)
topic = "xxxxx"
ws.send(build_message("SUBSCRIBE", {"id": "sub-0", "destination": topic}))
# Запустить задачу обнаружения пульса
thread = threading.Thread(target=check_heartbeat, args=[ws])
thread.start()
def check_heartbeat(ws):
while True:
time.sleep(5)
ws.send(build_message("SEND", ''))
print(f"Пульс успешно отправлен -------")
# Определите содержимое сообщения в соответствии с форматом сообщения
def build_message(command, headers, msg=None):
BYTE = {
'LF': '\x0A',
'NULL': '\x00',
'HIDDEN': '\u0001'
}
data_arr = [command + BYTE['LF']]
# add headers
for key in headers:
data_arr.append(key + ":" + headers[key] + BYTE['LF'])
data_arr.append(BYTE['LF'])
# add message, if any
if msg is not None:
data_arr.append(msg)
# terminate with null octet
data_arr.append(BYTE['NULL'])
frame = ''.join(data_arr)
# transmit over ws
print("Данные после построения:" + frame)
return frame
def main(address=socket_add):
websocket.enableTrace(False)
ws = websocket.WebSocketApp(address,
cookie="xxxxx",
on_message=on_message,
on_error=on_error,
on_close=on_close,
on_open=on_open)
ws.run_forever(ping_interval=5, ping_timeout=3)
if __name__ == "__main__":
main()
Unexpected server response: 200
wss:// и ws://
Разницаwss:// и ws://
Разница заключается в безопасности и шифровании передачи.,ws://
использовать Обычный WebSocket
протокол общения, wss://
использоватьзашифрованный WebSocket
протокол общения,на основе TLS/SSL Зашифровать.topic
Это правильно?,и требуется ли сертификация,Формат сообщения,Процесс общения и т.д.,В то же время при отладке вы можете объединять логи, распечатанные серверной частью, для устранения неполадок.,Удобное и быстрое расположение вопроса.👋 привет, я Lorin Лорейн, один Java Разработчик бэкэнд-технологий!девиз:Technology has the power to make the world a better place.
🚀 Моя страсть к технологиям — это моя мотивация продолжать учиться и делиться ими. Мой блог — это место об экосистеме Java, серверной разработке и последних технологических тенденциях.
🧠 как энтузиаст серверных технологий Java,Я не только увлечен исследованием новых возможностей языков и глубины технологий.,Также хочу поделиться своими идеями и лучшими практиками. Я верю, что обмен знаниями и сотрудничество сообщества могут помочь нам расти вместе.
💡 В моем блоге вы найдете информацию об основных концепциях Java, JVM. В основе технологии лежат широко используемые фреймворки, такие как Spring и Mybatis. 、Управление базами данных, например MySQL、RabbitMQ、Rocketmq и другое промежуточное программное обеспечение для Подробные статьи об сообщениях, оптимизации производительности и многом другом. Я также поделюсь некоторыми советами по программированию и способами решения вопросов.,Чтобы помочь вам лучше освоить программирование на Java.
🌐 Я поощряю взаимодействие и создание сообщества,Поэтому, пожалуйста, оставляйте свои вопросы, предложения или пожелания по теме.,Дайте мне знать, что вас интересует. также,Я поделюсь последней информацией об Интернете и технологиях.,Чтобы вы всегда были в курсе последних событий в мире технологий. Я с нетерпением жду совместной работы с вами на пути к технологиям,Давайте исследуем безграничные возможности мира технологий.
📖 Следите за обновлениями моего блога и давайте вместе стремиться к техническому совершенству.