【发布时间】:2020-02-20 00:41:55
【问题描述】:
我有一个带有这个设置的 spring-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,它可以像服务器一样与这个应用程序通信,从桌面应用程序接收数据并广播给所有人客户端连接到它。
【问题讨论】:
-
你的问题不是很清楚。实际上,您的 spring 项目中有一个客户端和一个服务器。你指的是哪个?当然你可以开发一个可以连接到这个服务器的桌面应用程序。
-
但是怎么做呢?在网上搜索,我找不到任何结果显示一些例子,无论是使用 Java (Swing) 还是 C++。
-
@KleberMota 你需要同时实现服务器端和客户端吗?
-
没有。仅限客户端。我已经有一个使用 spring-boot 和 spring-websockets 实现的服务器。我想知道如何使用 java/swing 或 c++/qt 为桌面实现客户端(独立于此服务器应用程序)。
标签: spring spring-boot spring-websocket