我正在构建一个tcp客户端来接收和发送消息。我按照Netty用户指南中的步骤编写了一个简单的tcp客户端,其中包含一个扩展ChannelInboundHandlerAdapter
的自定义处理程序。
在hander中,我存储了< code > ChannelHandlerContext :
@Override
public void channelActive (ChannelHandlerContext ctx) throws Exception {
super.channelActive (ctx);
this.ctx = ctx;
}
然后我有一个发送方法,它使用ChannelHandlerContext
发送消息:
public void sendMessage (String msg) {
if (ctx == null) {
return;
}
ChannelFuture cf = ctx.write (Unpooled.copiedBuffer (msg, CharsetUtil.UTF_8));
ctx.flush ();
}
我发现的另一个选项是在客户机类中使用Channel对象
channel.writeAndFlush (msg);
我需要从另一个线程调用send方法。最好的方法是什么?
先谢谢你。
< code > ChannelHandlerContext 和< code>Channel都是线程安全的,因此您可以从任何线程编写,而不必担心。
如果使用< code>Channel.write(),消息将必须通过整个管道。但是如果您使用< code > channelhandlercontext . write(),它将只需要通过管道中的上游处理程序。因此,写入< code > ChannelHandlerContext 会更有效。
还要注意,大多数时候最好使用writeAndFlush()
而不是write()
。
请查看此演示以了解更多详细信息。
异步Mysql客户端 AsyncMysql::query($sql, $usePool = true) 第二个参数设为false将不会使用连接池中的资源,默认都会从连接池中取,配置连接池数量 => config/database.php 具体使用 use AsyncMysql; //设置超时时间 AsyncMysql::setTimeout(2); $res = (
异步Redis客户端 连接池(连接池默认开启) use AsyncRedis; //关闭连接池 AsyncRedis::enablePool(false); //开启连接池 AsyncRedis::enablePool(true); 使用AsyncRedis use AsyncRedis; //设置超时时间 AsyncRedis::s
异步Http客户端 Get方式 1.使用域名形式 use AsyncHttp; //直接使用域名, get方式 $http = new AsyncHttp('http://groupco.com'); //设置2s超时 $http->setTimeout(2); //$http->setCookies(['token' => 'xxxx']);
异步Tcp客户端 串行发包 use AsyncTcp; $tcp = new AsyncTcp('127.0.0.1', 9501); $tcp->setTimeout(2); //串行发送 $res = (yield $tcp->call('hello server!')); $res = (yield $tcp->call('hello serv
我正在使用Android异步Http客户端。我的代码看起来像这样,并且运行良好。 我实现了一个静态HTTP客户端。我的服务器返回这个JSON数据。我不想将其视为字符串并将其转换回JSON。但是当我将其更改为eclipse告诉我 new AsyncHttpResponseHandler(){}类型的onSuccess(JSONObject)方法必须重写或实现超类型方法
为方便测试,我们以RPC中的例子来实现服务端,具体请看文档RPC章节。 纯原生异步 public static function mainServerCreate(ServerManager $server,EventRegister $register): void { // TODO: Implement mainServerCreate() method.