У меня есть проект с пружинным websocket с этой настройкой:
SocketHandler. java
@Component
public class SocketHandler extends TextWebSocketHandler {
List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws InterruptedException, IOException {
Map<String, String> value = new Gson().fromJson(message.getPayload(), Map.class);
session.sendMessage(new TextMessage("Hello " + value.get("name") + " !"));
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
}
}
WebSocketConfig. java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketHandler(), "/name");
}
}
index. html
<table>
<tr>
<td>
<button id="connect" type="button" onclick="connect();">Connect</button>
<button id="disconnect" type="button" disabled="disabled" onclick="disconnect();">Disconnect</button>
</td>
<td>
<label for="name">What is your name?</label>
<input type="text" id="name" placeholder="Your name here...">
<button id="send" type="button" onclick="send();">Send</button>
</td>
</tr>
</table>
<hr>
<table id="conversation" border="2">
<thead>
<tr>
<th>Greetings</th>
</tr>
</thead>
<tbody id="greetings">
</tbody>
</table>
script. js
var ws;
function setConnected(connected) {
var connect = document.querySelector("#connect");
var disconnect = document.querySelector("#disconnect");
var conversation = document.querySelector("#conversation");
var greetings = document.querySelector("#greetings");
if(connected) {
connect.setAttribute("disabled", "disabled");
disconnect.removeAttribute("disabled");
conversation.style.display = 'block';
} else {
connect.removeAttribute("disabled");
disconnect.setAttribute("disabled", "disabled");
conversation.style.display = 'none';
}
greetings.innerHTML = "";
}
function connect() {
ws = new WebSocket('ws://localhost:8080/name');
ws.onmessage = function(text) {
showGreeting(text.data);
}
setConnected(true);
}
function disconnect() {
if (ws != null) {
ws.close();
}
setConnected(false);
}
function send() {
var name = document.querySelector("#name");
var data = JSON.stringify({'name': name.value});
ws.send(data);
}
function showGreeting(message) {
var greeting = document.querySelector("#greetings");
var tr = document.createElement("tr");
var td = document.createElement("td");
td.innerText = message;
tr.appendChild(td);
greeting.appendChild(tr);
}
Интересно, возможно ли разработать настольное клиентское приложение, например, с Java / Swing или C ++ / Qt, которое могло бы взаимодействовать с этим приложением, как если бы оно было сервером, получая данные из настольного приложения и передавая их всем подключенным клиентам? к этому.