java – onMessage批注中包含多个数据的Websockets
我正在使用websockets.我想使用具有不同数据类型的多个@onMessage重载方法.
在客户端我有一个以下方法 @OnMessage public void onMessage(Message message) { System.out.println(message.getContent()+":"+message.getSubject()); } @OnMessage public void onMessage(String message) { System.out.println(message); } 其中Message是pojo类并对其进行解码和编码. 在服务器端 @OnMessage public void onMessage(String msg,Session session) { try { System.out.println("Receive Message:" + msg); session.getBasicRemote().sendText("{"subject":"This is subject1","content":"This is content1"}"); session.getBasicRemote().sendText("This is Example Test"); } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE,null,ex); } } 我收到以下错误 javax.websocket.DeploymentException: Class: clientwebsocket.MyClient. Text MessageHandler already registered. at org.glassfish.tyrus.core.ErrorCollector.composeComprehensiveException(ErrorCollector.java:83) at org.glassfish.tyrus.client.ClientManager$1.run(ClientManager.java:384) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:565) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:110) at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:343) at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:182) at clientwebsocket.ClientWebSocket.start(ClientWebSocket.java:31) at clientwebsocket.ClientWebSocket.main(ClientWebSocket.java:40) 任何人都可以建议我们如何使用多种类型的数据发送到服务器或从服务器发送数据. 解决方法
这是不可能的.
JSR 356明确定义每条文本消息只能有一个消息处理程序,每个二进制消息一个,每个
PongMessage一个.参见
@OnMessage javadoc:
====== 此方法级别注释可用于使Java方法接收传入的Web套接字消息.每个websocket 该方法可以具有非void返回类型,在这种情况下是web套接字 开发人员应该 例如: @OnMessage public void processGreeting(String message,Session session) { System.out.println("Greeting received:" + message); } 例如: @OnMessage public void processUpload(byte[] b,boolean last,Session session) { // process partial data here,which check on last to see if these is more on the way } 开发人员不应继续引用类型为java.io.Reader,java.nio.ByteBuffer的消息对象 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |