【问题标题】:correct implementation of the method messageReceived () (Netty)正确实现方法messageReceived()(Netty)
【发布时间】:2015-06-11 20:07:34
【问题描述】:

如何修正这种写法messageReceived().
更确切地说,如何根据消息连接客户端的内容来配置服务器的响应。

String fromClientData ="";
String [] params;
User user;
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws IOException {
    fromClientData = e.getMessage().toString();
    params = fromClientData.split(";");
    String idOrDemo = params[1];

    if (params[0].equals("demo")) {
        user = useService.getById(idOrDemo);
        e.getChannel().write("demo;" + user.getId() + ";");
    }

    if (params[0].equals("site")) {
        Integer id = Integer.parseInt(idOrDemo);
        user = userService2.getById(id);

        if (params[2].split(":")[0].equals("SOME")) {
            //todo something
        }

        ctx.getChannel().write("SOME:" + str + ";");    
    } else {

        user.setChannelUser(e.getChannel());
        if (params[1].equals("updateCache")) {
            sendUpdate();
        }
        else {
            setClient();
        }
    }
    } else {
        Integer id = Integer.parseInt(idOrDemo);
        user = userService.getById(id);

        user.setChannelUser(e.getChannel());
        if (params[1].equals("updateCache")) {
            sendUpdate();
        }
        else {
            setClient();
        }
    }
}

【问题讨论】:

  • 你能提供更多关于你需要的信息吗?并提供一个框架结构的例子?

标签: java server netty


【解决方案1】:

先,后

e.getChannel().write("demo;" + user.getId() + ";");

你需要做的:

e.getChannel().flush() 或替换为e.getChannel().writeAndFlush("demo;" + user.getId() + ";");

其次,拆分后,我建议将if中的条件更改为:

if ("demo".equals(params[0])) { }

因为,如果 params[0] 为 null,您将遇到 NullPointerException。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2010-09-21
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多