Java netty socket io中的自定义请求/响应格式

Java netty socket io中的自定义请求/响应格式,java,json,websocket,socket.io,netty,Java,Json,Websocket,Socket.io,Netty,当我发送请求时,它看起来像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

当我发送请求时,它看起来像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-具有版本控制的命名空间

我不想要42。并且不希望数组位于顶级 我只是想要这样的回应

{
    "transactionId": "53445t-53454-534543-53453435",
    "namespace": "/v1/user",
    "event": "currentPerson",
    "person": {
        "id": 5,
        "firstName": "Ivan"
    }
}
还有这样的要求

{
    "transactionId": "53445t-53454-534543-53453435",
    "namespace": "/v1/user",
    "event": "currentPerson"
}

现在我使用Socket IO JS客户端,但仅用于测试目的,服务将使用一些C++库,所以我不需要使用Sock.IO样式格式。 可能吗?我可以用什么方法

我找到了addJsonObjectListener方法和sendJsonObject,但它们在1.7.0中被删除了,而且无论如何,我不想传递@class指令,让客户端了解服务器类层次结构对我来说似乎很奇怪。我只想在客户机上定义一些对象,并在服务器上手动解析它,然后将手动生成的json传递给客户机

另外,Configuration.jsonTypeFieldName现在不可用,因此@class now是name的唯一选项


netty socket io 1.7.7

我想转换字符串形式的Json响应,并将其作为字符串发送

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

ctx.write(a);

我不熟悉socket.io的协议方面和netty socket io,但基本上如果你不使用socket.io样式的格式,为什么要使用或测试socket.io?@Donghwan Kim:这是我第一次在osgi中开发。第一次使用WebSocket。我需要一个与osgi集成的图书馆,最好是在netty上。我发现了SpringWebSocket,但它包含很多复杂的依赖项,很难集成到osgi中。Netty socket io集成得很好,工作起来很有魅力,但我完全相信消息的格式可以定制。如果不是的话,下一个整合的候选者就是网络世界。你能给我一个建议吗?网络圈是个不错的选择吗?你对osgi和nettosphere有经验吗?你还知道其他哪些websocket库吗?我不知道osgi,但这里有一些关于编写实时应用程序的建议。首先,决定是使用vanilla WebSocket,它是RFC指定的WebSocket协议的纯实现,还是使用WebSocket之上的某种更高协议,它通过隐藏低级细节提供有用的模式来编写实时webapp,并考虑WebSocket不可用的时间。对于前者,可以使用和类似的实现。对于后者,可以使用netty套接字io和。当然,你需要相应的C++客户端实现你所决定的协议。米哈伊尔:很有趣!但如何在高级抽象的netty socket io侦听器中获取ChannelHandlerContext?我只有SocketIOClient,没有Netty对象。或者我需要编写定制的PacketEncode/PacketDecoder?但重写后如何实例化它?@Ivan您可以扩展SocketIOChannelInitializer并重写您想要的任何内容