气氛:服务器收到消息
Atmosphere: server receives its message
我有一个带有 onMessage 功能的 ManagedService
@ManagedService(path = "/atmosphere/formuserpresence/{id}")
public class FormUserPresenceUpdate extends AtmosphereHelper
{
@Message
public final void onMessage(final String message) throws IOException
{
...
...
...
...
broadcast(FormUserPresenceUpdate.class, "/atmosphere/formuserpresence/" + statusMessage.getId(), returnArrayString);
}
}
而且我有客户端-服务器通信。多个客户可以使用他们的 ID 订阅这个频道。然后,客户端可以发送一个状态,比如
留言={
身份:"uniqId",
状态:"statusMessageValue"
});
Class FormUserPresenceUpdate 存储所有客户端的所有接收状态,并通过广播功能将它们作为消息 (returnArrayString) 作为数组发回。
问题在于,无论客户端是否接收到正确的值(消息数组),服务器也从自身接收到该数组,但无法解析它。那么,问题是:这种情况的解决方案是什么?我能以某种方式做到这一点,而不是由服务器本身发送这组消息吗?或者我应该创建第二个频道(我真的不想那样做)?
您应该将消息定义为 class 并为此定义解码器 class;)
public class Message {
private String ident;
private String status;
...
getter and setter method.
...
}
解码器(这取决于com.fasterxml.jackson.databind.ObjectMapper
):
public class MessageDecoder implements Decoder<String, Message> {
private ObjectMapper mapper = new ObjectMapper();
@Override
public Message decode(String s) {
try {
return mapper.readValue(s, Message.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
并将decoders = {MessageDecoder.class}
添加到@Message
:
@Message(decoders = {MessageDecoder.class})
public final void onMessage(final String message) throws IOException
{
...
...
...
...
broadcast(FormUserPresenceUpdate.class, "/atmosphere/formuserpresence/" + statusMessage.getId(), returnArrayString);
}
还有一个方案,用JSONParser
判断message是否可以解析成Messageclass,如果不能,让@Messsage
方法return。
我有一个带有 onMessage 功能的 ManagedService
@ManagedService(path = "/atmosphere/formuserpresence/{id}")
public class FormUserPresenceUpdate extends AtmosphereHelper
{
@Message
public final void onMessage(final String message) throws IOException
{
...
...
...
...
broadcast(FormUserPresenceUpdate.class, "/atmosphere/formuserpresence/" + statusMessage.getId(), returnArrayString);
}
}
而且我有客户端-服务器通信。多个客户可以使用他们的 ID 订阅这个频道。然后,客户端可以发送一个状态,比如
留言={ 身份:"uniqId", 状态:"statusMessageValue" });
Class FormUserPresenceUpdate 存储所有客户端的所有接收状态,并通过广播功能将它们作为消息 (returnArrayString) 作为数组发回。
问题在于,无论客户端是否接收到正确的值(消息数组),服务器也从自身接收到该数组,但无法解析它。那么,问题是:这种情况的解决方案是什么?我能以某种方式做到这一点,而不是由服务器本身发送这组消息吗?或者我应该创建第二个频道(我真的不想那样做)?
您应该将消息定义为 class 并为此定义解码器 class;)
public class Message {
private String ident;
private String status;
...
getter and setter method.
...
}
解码器(这取决于com.fasterxml.jackson.databind.ObjectMapper
):
public class MessageDecoder implements Decoder<String, Message> {
private ObjectMapper mapper = new ObjectMapper();
@Override
public Message decode(String s) {
try {
return mapper.readValue(s, Message.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
并将decoders = {MessageDecoder.class}
添加到@Message
:
@Message(decoders = {MessageDecoder.class})
public final void onMessage(final String message) throws IOException
{
...
...
...
...
broadcast(FormUserPresenceUpdate.class, "/atmosphere/formuserpresence/" + statusMessage.getId(), returnArrayString);
}
还有一个方案,用JSONParser
判断message是否可以解析成Messageclass,如果不能,让@Messsage
方法return。