【问题标题】:Chat Server with Netty与 Netty 聊天服务器
【发布时间】:2012-12-04 05:43:16
【问题描述】:

我用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());
  }


}

【问题讨论】:

    标签: java networking netty


    【解决方案1】:

    您必须为所有创建的 ChannelPipeline 实例共享同一个处理程序实例。或者将 ChannelGroup 声明为 static final

    【讨论】:

    • 哇,我怎么会错过这个。谢谢,每当通道连接时,我都会创建一个新的 ChannelHandler。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多