【发布时间】:2014-10-19 16:37:14
【问题描述】:
是否可以将自定义对象从客户端传递到服务器,使用 Tyrus 项目进行 websocket 通信。我想使用 JavaFX 构建简单的桌面应用程序。如何传递我在客户端“收集”的数据(例如,具有姓名和姓氏字段的对象人员),以便我可以将该数据保存到数据库(在我的服务器逻辑上)?
【问题讨论】:
标签: object websocket javafx tyrus
是否可以将自定义对象从客户端传递到服务器,使用 Tyrus 项目进行 websocket 通信。我想使用 JavaFX 构建简单的桌面应用程序。如何传递我在客户端“收集”的数据(例如,具有姓名和姓氏字段的对象人员),以便我可以将该数据保存到数据库(在我的服务器逻辑上)?
【问题讨论】:
标签: object websocket javafx tyrus
这是可能的,传输数据的形式完全由您选择。
WebSocket 可以传输文本或二进制数据,仅此而已。您可以将您的 obect 序列化为 ObjectStream 并将数据作为二进制流发送,或者您可以使用 JAXB 将数据编组和编组到 XML 或从 XML 或 JSON-P 用于 JSON(请注意,还有很多其他可能性,如 GSON、Jackson 等)。
如果我处于您的位置,我会将 JSON 与我认为可用的任何库一起使用 - 这样,当您将应用程序范围扩展到 javascript 客户端时,您将能够(希望)重用所有内容。
【讨论】:
除了Pavel Bucek解释,这里还有示例代码
Base64 转换
import java.util.Base64;
服务器端点
ArrayList listobj=new ArrayList();
listobj.add("data1");
listobj.add("data2");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(listobj);
String str = Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
session.getBasicRemote().sendText(str);
客户(Tyrus)
@OnMessage
public void onMessage(Session session, final String message) throws IOException {
try {
byte data[] = Base64.getDecoder().decode(message);
bis = new ByteArrayInputStream(data);
ois = new ObjectInputStream(bis);
ArrayList list= (ArrayList) ois.readObject();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
} catch (Exception e) {
System.out.println("error : " + e.getMessage());
} finally {
if (bis != null) {
bis.close();
}
if (ois != null) {
ois.close();
}
}
}
【讨论】: