Jetty WebSocket客户端不适用于二进制侦听器

时间:2015-05-21 22:05:39

标签: java javascript websocket jetty-9 libwebsockets

我有一个使用Jetty WebSocket Client版本9.x的Java应用程序。它适用于从服务器发送的文本消息,但从不调用二进制侦听器。我有一个Javascript客户端实现,我基本上复制。我在Javascript中使用Java做同样的事情,调用相同的服务器。 Javascript有效,Java也没有。因此,我认为在Jetty中没有为二进制侦听器正确配置某些内容。

例如,服务器正在发送blob数据。我知道在Javascript客户端中,我可以将binarytype设置为arraybuffer或blob。我想Jetty可能需要类似的设置,但是我已经查看了API并在网上搜索了很多例子。在线的二进制监听器的例子很少,并且没有提到设置二进制类型的任何地方,或者使二进制llistener工作所需的任何其他特殊设置。

这是我的代码的综合表示。代码遍布各个类,因此这不是一个独立的应用程序,但我认为它显示了我正在做的事情。服务器使用libwebsockets实现。

客户端实施

import org.eclipse.jetty.websocket.client.WebSocketClient;
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;

client = new WebSocketClient();
client.start();
client.setMaxBinaryMessageBufferSize((int) 500e6);//just to be sure
ClientUpgradeRequest request = new ClientUpgradeRequest();
request.setSubProtocols("pipe-data");
client = new SimpleSocket();
client.connect(socket, uri, request);

套接字实现

@WebSocket
public class SimpleSocket {

   @SuppressWarnings("unused")
   private Session session;

   private SocketHandlerBase handler;

   private boolean connected = false;

   public SimpleSocket(SocketHandlerBase listener) {
       this.handler = listener;
   }

   @OnWebSocketClose
   public void onClose(int statusCode, String reason) {
       this.handler.onClose(statusCode, reason);
       this.connected = false;
   }

   @OnWebSocketConnect
   public void onConnect(Session session) {
       this.handler.onConnect(session);
       this.connected = true;
   }

   //invoked when text messages are sent
   @OnWebSocketMessage
   public void onMessage(String msg) {
       this.handler.onMessage(msg);
   }

    //does not get invoked when binary data is sent
   @OnWebSocketMessage
   public void onMessage(byte buf[], int offset, int length) {
       this.handler.onMessage(buf, offset, length);
   }

   public boolean isConnected() {
       return this.connected;
   }

   public SocketHandlerBase getHandler() {
       return this.handler;
   } 
}

1 个答案:

答案 0 :(得分:0)

我正在调用的服务器很难找到问题。调用参数的一个非常具体的配置导致不调用二进制侦听器。这里没有关于Jetty客户端或WebSocket的任何内容。