Tyrus - 将对象从客户端传递到服务器

时间:2014-10-19 16:37:14

标签: object websocket javafx tyrus

使用Tyrus项目进行websocket通信是否可以将自定义对象从客户端传递到服务器。我想使用JavaFX构建简单的桌面应用程序。我如何传递我收集的数据"在客户端(例如,具有名称和姓氏字段的对象人员),所以我可以将该数据保存到数据库(在我的服务器逻辑上)?

2 个答案:

答案 0 :(得分:0)

这是可能的,传输数据的形式完全是您的选择。

WebSocket可以传输文本或二进制数据。您可以将对象序列化为ObjectStream并将数据作为二进制流发送,或者您可以使用JAXB来对数据进行编组或将数据与XML进行编组,或者使用JSON-P进行JSON(请注意,还有很多其他的可能性,比如GSON,Jackson,......)。

如果我在你的位置,我会将JSON用于我认为可用的任何库 - 这样,当你将应用程序范围扩展到javascript客户端时,你就能够重用(希望)一切。

答案 1 :(得分:0)

Pavel Bucek 解释外,示例代码在这里

Base64进行转化

import java.util.Base64;

<强> Serverendpoint

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();
        }
    }
}