【问题标题】:Custom request/response format in netty-socket-ionetty-socket-io 中的自定义请求/响应格式
【发布时间】: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 .
  • 对于前者,可以使用NettyJava WebSocket APITyrus (RI) 实现。对于后者,可以使用 netty-socket-io、Atmosphere (Nettosphere)Cettia。当然,您将需要您决定的协议的相应 C++ 客户端实现。

标签: java json websocket socket.io netty


【解决方案1】:

我想将 Json 响应转换为字符串并将其作为字符串发送。

String json = convertInString(json);
buf = Unpooled.copiedBuffer(json, CharsetUtil.UTF_8);

ctx.write(a);

【讨论】:

  • 米哈伊尔:这很有趣!但是如何在高级抽象的 netty-socket-io 侦听器中获取 ChannelHandlerContext 呢?我只有 SocketIOClient,没有 Netty 对象。或者我需要编写自定义 PacketEncode/PacketDecoder?但是覆盖后如何实例化呢?
  • @Ivan 你可以扩展SocketIOChannelInitializer 并覆盖你想要的任何东西
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2016-01-29
  • 2017-03-04
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
相关资源
最近更新 更多