现在的位置: 首页 > 综合 > 正文

5 Sending and Receiving Messages

2019年09月24日 ⁄ 综合 ⁄ 共 2289字 ⁄ 字号 评论关闭

   
            官网英文参考:

            中文解析:
                    Websocket 可以发送和接收文本信息和二进制信息,另外也可以发送ping 结构和接收pong结构信息。这一节描述怎么使用session和remoteendpoint 接口实现发消息给对方(connected peer),以及用onMessage 注解方式从对方那里接收消息。     

                    5.1 Sending Messages

                        下面是endpoint发送消息 必要的几步。
                    1.从connection获取session对象。
                        session对象作为endpoint所含方法中的一个参数是可用,(具体参数和方法上一节表中有列举),当你发送的消息是回复对方的,那么在收到消息的方法中已经保留了可用的session对象(如注入的Onmessage 方法)。如果你发的消息不是回复别人的,那么你需要存取session对象,在调用Onopen方法的时候。
                    2.用session对象获取remoteendpoint 对象。
                        Session.getBasicRemote 方法和Session.getAsyncRemote 方法分别返回的是RemoteEndpoint.Basic和RemoteEndpoint.Async 对象。RemoteEndpoint.Basic接口提供阻塞式的消息发送方式,RemoteEndpoint.Async 提供的非阻塞式的消息传输方式。
                    3.用remoteEndpoint对象发送消息给对方。
                       下面有一系列的方法,你可以用来发送消息给对方。       
  • void RemoteEndpoint.Basic.sendText(String text)

    Send a text message to the peer. This method blocks until the whole message has been transmitted.

  • void RemoteEndpoint.Basic.sendBinary(ByteBuffer
    data)

    Send a binary message to the peer. This method blocks until the whole message has been transmitted.

  • void RemoteEndpoint.sendPing(ByteBuffer appData)

    Send a ping frame to the peer.

  • void RemoteEndpoint.sendPong(ByteBuffer appData)

    Send a pong frame to the peer.

                    第四节的例子 解释了怎么用上述过程回复每个文本消息。  
                5.1.1 Sending
Messages to All Peers Connected to an Endpoint(群发)
                            每个endpoint对象只能有且关联到一个连接上,然后有这样一种需求,那就是一个endpoint实体对象要给所有连接的对象发送消息。包括chat 应用和线上拍卖。为了实现这个功能,Session接口提供了getOpenSession 方法。下面举例说明了怎么给所有连接的用户发送消息。
@ServerEndpoint("/echoall")
public class EchoAllEndpoint {
   @OnMessage
   public void onMessage(Session session, String msg) {
      try {
         for (Session sess : session.getOpenSessions()) {
            if (sess.isOpen())
               sess.getBasicRemote().sendText(msg);
         }
      } catch (IOException e) { ... }
   }
}

                    5.2 Receiving Messages

                            OnMessage 注解指定的方法是处理发过来的message,一个endpoint对象最多可以有三个OnMessage 方法,每一个方法处理一种类型的数据(文本格式,二进制格式,pong 格式),下面例子 列出三个OnMessage 方法接收处理三种类型的数据。
@ServerEndpoint("/receive")
public class ReceiveEndpoint {
   @OnMessage
   public void textMessage(Session session, String msg) {
      System.out.println("Text message: " + msg);
   }
   @OnMessage
   public void binaryMessage(Session session, ByteBuffer msg) {
      System.out.println("Binary message: " + msg.toString());
   }
   @OnMessage
   public void pongMessage(Session session, PongMessage msg) {
      System.out.println("Pong message: " + 
                          msg.getApplicationData().toString());
   }
}


抱歉!评论已关闭.