<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>WebSocket Chat</title>
<script type="text/javascript">
var wsChat, wsUppercase, wsLowercase, wsJsonSave;
// Функция подключения к WebSocket
function connect() {
wsChat = new WebSocket('ws://localhost:8080/chat');
wsUppercase = new WebSocket('ws://localhost:8080/uppercase');
wsLowercase = new WebSocket('ws://localhost:8080/lowercase');
wsJsonSave = new WebSocket('ws://localhost:8080/jsonsave');
wsChat.onmessage = function (event) {
logMessage('Chat: ' + event.data);
};
wsUppercase.onmessage = function (event) {
logMessage('Uppercase: ' + event.data);
};
wsLowercase.onmessage = function (event) {
logMessage('Lowercase: ' + event.data);
};
wsJsonSave.onmessage = function (event) {
logMessage('Json Save: ' + event.data);
};
}
// Функция для вывода сообщений в textarea
function logMessage(message) {
var log = document.getElementById('log');
log.value += message + '\n';
}
// Отправка сообщения в соответствующий WebSocket
function send() {
var message = document.getElementById('message').value;
if (wsChat.readyState === WebSocket.OPEN) {
wsChat.send(message);
}
}
function sendUp() {
var message = document.getElementById('message').value;
if (wsUppercase.readyState === WebSocket.OPEN) {
wsUppercase.send(message);
}
}
function sendLow() {
var message = document.getElementById('message').value;
if (wsLowercase.readyState === WebSocket.OPEN) {
wsLowercase.send(message);
}
}
// Отправка JSON и получение результата сохранения
function sendJson() {
var message = document.getElementById('message').value;
try {
// Пытаемся создать JSON из строки
var json = JSON.parse(message);
if (wsJsonSave.readyState === WebSocket.OPEN) {
wsJsonSave.send(JSON.stringify(json));
}
} catch (e) {
logMessage('Invalid JSON format: ' + message);
}
}
window.onload = function() {
connect();
};
</script>
</head>
<body>
<h1>WebSocket Chat</h1>
<textarea id="log" rows="20" cols="50" readonly></textarea><br/>
<!-- Поле для ввода сообщения в формате JSON -->
<textarea type="text" rows="10" cols="30" id="message" placeholder="Enter your JSON message"></textarea><br/>
<!-- Кнопки для отправки -->
<button onclick="send();">Send</button>
<button onclick="sendUp();">SendUpper</button>
<button onclick="sendLow();">SendLower</button>
<button onclick="sendJson();">SendJson</button>
</body>
</html>
Спасибо за предоставление HTML файла. Это клиентская часть вашего WebSocket приложения. Давайте проанализируем его:
Анализ клиентского кода WebSocket
1. Структура подключений
В приложении создаются четыре различных WebSocket соединения:
- Чат: ws://localhost:8080/chat
- Преобразование в верхний регистр: ws://localhost:8080/uppercase
- Преобразование в нижний регистр: ws://localhost:8080/lowercase
- Сохранение JSON: ws://localhost:8080/jsonsave
2. Основные функции
Подключение (connect()
)
- Инициализирует все четыре WebSocket соединения
- Устанавливает обработчики событий для каждого соединения
- Вызывается автоматически при загрузке страницы
Отправка сообщений
Реализовано четыре метода отправки:
- send()
- отправка в чат
- sendUp()
- отправка для преобразования в верхний регистр
- sendLow()
- отправка для преобразования в нижний регистр
- sendJson()
- отправка JSON с предварительной валидацией
Обработка сообщений
- Все входящие сообщения обрабатываются через
logMessage()
- Сообщения отображаются в текстовой области с префиксом, указывающим источник
3. Пользовательский интерфейс
- Текстовая область для отображения логов
- Поле ввода для сообщений
- Четыре кнопки для разных типов отправки
4. Особенности реализации
- Проверка состояния соединения перед отправкой (
readyState === WebSocket.OPEN
) - Валидация JSON перед отправкой в
sendJson()
- Использование одного поля ввода для всех типов сообщений
5. Потенциальные улучшения
- Добавление обработки ошибок соединения
- Реализация переподключения при обрыве связи
- Добавление индикации статуса соединения
- Разделение полей ввода для разных типов сообщений
6. Взаимодействие с сервером
Ожидаемые серверные обработчики: 1. ChatHandler - обработка обычных сообщений 2. UpperCaseHandler - преобразование текста в верхний регистр 3. LowerCaseHandler - преобразование текста в нижний регистр 4. JsonSaveHandler - сохранение и обработка JSON данных
Этот файл значительно проясняет структуру вашего приложения. Теперь мы видим, что:
- Приложение поддерживает четыре различных типа WebSocket взаимодействий
- Используется простой, но эффективный пользовательский интерфейс
- Реализована базовая валидация для JSON сообщений
Для полного понимания работы приложения было бы полезно увидеть: 1. Реализацию серверных обработчиков 2. Любые модели данных, используемые в приложении 3. Конфигурацию сервера (если есть дополнительная)