1

友人の netty と一緒に簡単なチャット サーバーを作成し、telnet でテストしました。私たちの両方が接続されている場合、グループのサイズは 1 であると表示されます。ユーザーのリストに書き込むときは常に、メッセージを送信した人にのみ書き込みます。どうすればこれを修正できますか?

import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.DefaultChannelGroup;

public class ServerChannelHandler extends SimpleChannelHandler {

  private ChannelGroup users = new DefaultChannelGroup();

  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    users.write(e.getMessage());
  }

  @Override
  public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
    users.add(e.getChannel());
    System.out.println("Opened. ");
    System.out.println(users.size());
  }

  @Override
  public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
    users.remove(e.getChannel());
  }


}
4

1 に答える 1

2

作成されたすべての ChannelPipeline インスタンスに対してハンドラーの同じインスタンスを共有する必要があります。または、 ChannelGroup を static final として宣言します

于 2012-12-04T07:31:54.853 に答える