【问题标题】:Angular 8 socket.io-client 2.2.0 and Java netty-socket.io message not being received?没有收到 Angular 8 socket.io-client 2.2.0 和 Java netty-socket.io 消息?
【发布时间】:2019-09-04 07:55:32
【问题描述】:

我正在使用netty-socket.io,并像演示一样实现了服务器。

我在服务器和客户端都收到onConnect 事件,但是当我发送消息{message: message} 时,我在服务器事件上没有收到任何信息,尽管我在网络选项卡中看到消息正在发送。

  Configuration config = new Configuration();
    config.setHostname("localhost");
    config.setPort(9092);

    final SocketIOServer server = new SocketIOServer(config);
    server.addConnectListener(socketIOClient -> System.out.println("Connection test"));
    server.addEventListener("messageevent", MessageEventObject.class, new DataListener<MessageEventObject>() {
        @Override
        public void onData(SocketIOClient socketIOClient, MessageEventObject messageEventObject, AckRequest ackRequest) throws Exception {
            System.out.println("message received!");
        }
    });
    server.start();

我的MessageEventObjectString message 属性,constructor getterssetters,看起来与客户端相同。

这是我的 websocket 服务客户端:

  export class WebsocketService {

   private socket;
   private subject = new Subject < any > ();

   constructor() {
    console.log('test!');
   }

   public connect(host: string, port: number) {
    this.socket = io(`http://${host}:${port}`, {
     'reconnection': false
    });
    this.socket.on('connect', this.onConnected);
    this.socket.on('connect_error', this.onConnectionFailure);
   }

   public getConnectionStateUpdate(): Observable < any > {
    return this.subject.asObservable();
   }

   public sendMessage(message: string) {
    console.log('test');
    this.socket.emit('messageevent', {
     message: message
    });
   }

   private onConnected = () => {
    this.subject.next({
     connected: true
    });
   }

   private onConnectionFailure = () => {
    this.subject.next({
     connected: false
    });
   }
  }

是不是我做错了什么?

【问题讨论】:

  • 您确定您找对地方了吗? System.out 指向哪里?
  • @Kayaman 在 Java 控制台中是的。我在哪里收到消息Connection test

标签: java angular socket.io netty


【解决方案1】:

我很想在大量调试和打破我的头脑之后回答我自己的问题,我懒惰使用带有 tomcat 或码头的引擎 IO,只是想使用不需要任何 servlet 的很棒的 netty 包,我试图修复它并弄清楚。

起初我以为是客户端的协议版本,所以我使用了与他们的github page here 上的演示完全相同的客户端,但没有奏效,所以问题出在服务器端。

看来您的对象 (MessageEventObject) 除了您的其他构造函数外,还必须有一个默认的空构造函数,这可能是因为 netty 尝试构建一个空对象但它失败了,这会导致您看不到的异常。

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2014-02-08
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2023-03-28
    • 2014-05-09
    相关资源
    最近更新 更多