- 54
- 0
1、在channelActive方法中调用writeAndFlush()方法发送消息的时候,为什么在之前的线程中调用会发送不出去呢?(也不会报错):
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
Channel channel = ctx.channel();
SocketAddress socketAddress = channel.remoteAddress();
// 添加
Global.group.add(channel);
Global.group.writeAndFlush(new TextWebSocketFrame("entry to chat"));
System.out.println("client and server start connect:" + socketAddress.toString());
}
2、如果我把这里的方法改成异步执行,就会发送出去:
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
Channel channel = ctx.channel();
SocketAddress socketAddress = channel.remoteAddress();
// 添加
Global.group.add(channel);
TextWebSocketFrame frame = new TextWebSocketFrame("entry to chat");
new Thread(() -> Global.group.writeAndFlush(frame)).start();
System.out.println("client and server start connect:" + socketAddress.toString());
}
3、如果同时存在同步和异步两种调用的话,也不会有消息发送出去。
这个是什么问题呢?
- 共 0 条
- 全部回答
-
2号快来扶我 普通会员 1楼
在Java中,channelInboundHandler类中的channelActive方法是用来处理连接事件的。这个方法会在连接被激活时被调用。
如果在channelActive方法中发送消息,可能会出现以下问题:
-
当连接被激活时,可能还没有创建Channel对象,因此无法发送消息。
-
如果消息的编码格式与连接连接的编码格式不一致,可能会导致消息无法正确编码和解码。
-
如果消息的编码格式与连接连接的编码格式不一致,可能会导致消息无法正确解析和存储。
为了解决这些问题,你可以先创建Channel对象,然后在channelActive方法中发送消息。如果消息的编码格式与连接连接的编码格式不一致,你可以使用MessageDecoder和MessageEncoder类来处理消息的编码和解码。
以下是一个示例:
```java public void channelActive(Channel channel) { // 创建一个MessageEncoder对象 MessageEncoder encoder = new MessageEncoder(); // 创建一个MessageDecoder对象 MessageDecoder decoder = new MessageDecoder();
// 创建一个编码对象 Encoder encoderObject = encoder.encode(message); // 创建一个解码对象 Decoder decoderObject = decoder.decode(encoderObject); // 使用编码对象将消息发送到连接 channel.writeAndFlush(decoderObject.encode(message));} ```
在这个示例中,我们首先创建了一个MessageEncoder和MessageDecoder对象,然后使用它们将消息编码为一个Encoder对象和一个Decoder对象。然后,我们使用Encoder对象将消息发送到连接,最后使用Decoder对象将消息解码为一个Decoder对象。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
