【发布时间】:2015-03-27 15:04:52
【问题描述】:
当我发送请求时,它看起来像(Google Chrome 控制台):
42/v1/user,["currentPerson",{"transactionId":"53445t-53454-534543-53453435"}]
其中53445t-53454-534543-53453435 - 是唯一的 transactionId,我会自动将其包含在请求和每个响应中。
响应看起来像
42/v1/user,["currentPerson","53445t-53454-534543-53453435",{"id":5,"firstName":"Ivan"}]
其中/v1/user - 带有版本控制的命名空间;
1) 我不想要 42。也不想要顶级数组 2) 我就是想要这样的回应
{
"transactionId": "53445t-53454-534543-53453435",
"namespace": "/v1/user",
"event": "currentPerson",
"person": {
"id": 5,
"firstName": "Ivan"
}
}
3) 还有这样的要求
{
"transactionId": "53445t-53454-534543-53453435",
"namespace": "/v1/user",
"event": "currentPerson"
}
现在我使用 socket-io js 客户端但仅用于测试目的,服务将与使用某些 C++ 库一起使用,因此我不需要使用 socket.io 样式格式。
有可能吗?我可以使用哪些方法?
我找到了 addJsonObjectListener 方法和 sendJsonObject,但它们在 1.7.0 中被删除了,无论如何我不想传递 @class 指令,让客户了解服务器似乎很奇怪类层次结构。我只想在客户端定义一些对象并在服务器上手动解析它,然后将手动形成的 json 传递给客户端。
P.S.:顺便说一句 Configuration.jsonTypeFieldName 现在不可用,所以 @class 现在是唯一的名称选项。
netty-socket-io 1.7.7
【问题讨论】:
-
我不熟悉socket.io的协议方面和netty-socket-io,但基本上如果你不会使用socket.io风格的格式,你为什么要使用或测试socket.io?
-
@Donghwan Kim:这是我第一次在osgi中开发。第一次使用 websockets。我需要一个带有 osgi-integration 的库(最好在 netty 上)。我找到了spring websockets,但是它包含很多复杂的依赖关系,很难集成到osgi中。 Netty-socket-io 集成得很好,工作起来就像一个魅力,但我完全确定消息的格式可以定制。如果不是,集成的下一个候选者是 nettosphere。你能给个建议吗? nettosphere 是一个不错的选择吗?你有使用 osgi 和 nettosphere 的经验吗?你还知道哪些其他 websocket 库?
-
我不了解 osgi,但这里有一些关于编写实时应用程序的建议。首先,决定是使用 vanilla WebSocket,它是 RFC 指定的 WebSocket 协议的纯实现,还是 WebSocket 之上的一些更高的协议,通过隐藏低级细节并考虑 WebSocket 何时不可用,提供有用的模式来编写实时 webapp .
-
对于前者,可以使用Netty 和Java WebSocket API 等Tyrus (RI) 实现。对于后者,可以使用 netty-socket-io、Atmosphere (Nettosphere) 和 Cettia。当然,您将需要您决定的协议的相应 C++ 客户端实现。
标签: java json websocket socket.io netty