我想在入站处理程序
以外的类中的特定位置读取消息。我无法在 channelRead0
方法中找到读取预期内容的方法,该方法从 netty 框架调用。
例如:
context.writeMessage("message");
String msg = context.readMessage;
如果这是不可能的,我如何将我在channelRead0
方法中获得的结果映射到我在另一个类中进行的特定调用?
Netty框架被设计成异步驱动的。使用这个类比,它可以以最少的线程使用处理大量连接。如果您正在创建一个使用netty框架将调用分派到远程位置的api,您应该对您的调用使用相同的类比。
不要让你的 API 直接返回值,而是让它返回未来
例如:
这在很大程度上基于我过去提交的答案。
我们从将请求映射到管道中请求的out处理程序开始:
public class MyLastHandler extends SimpleInboundHandler<String> {
private final SynchronousQueue<Promise<String>> queue;
public MyLastHandler (SynchronousQueue<Promise<String>> queue) {
super();
this.queue = queue;
}
// The following is called messageReceived(ChannelHandlerContext, String) in 5.0.
@Override
public void channelRead0(ChannelHandlerContext ctx, String msg) {
this.queue.remove().setSuccss(msg);
// Or setFailure(Throwable)
}
}
然后,我们需要一种将命令发送到远程服务器的方法:
java prettyprint-override">Channel channel = ....;
SynchronousQueue<Promise<String>> queue = ....;
public Future<String> sendCommandAsync(String command) {
return sendCommandAsync(command, new DefaultPromise<>());
}
public Future<String> sendCommandAsync(String command, Promise<String> promise) {
synchronized(channel) {
queue.offer(promise);
channel.write(command);
}
channel.flush();
}
完成方法后,我们需要一种方法来调用它:
sendCommandAsync("USER anonymous",
new DefaultPromise<>().addListener(
(Future<String> f) -> {
String response = f.get();
if (response.startWidth("331")) {
// do something
}
// etc
}
)
);
如果被调用方希望使用我们的api作为阻塞调用,他也可以这样做:
String response = sendCommandAsync("USER anonymous").get();
if (response.startWidth("331")) {
// do something
}
// etc
请注意
Future。与套接字读取操作不同,如果线程状态中断,get()
会抛出一个InterruptedException。
FutureListener
中不应该出现此异常。
问题内容: 我想在班级以外的特定位置阅读消息。我找不到在netty框架中调用的方法中读取期望值的方法。 例如: 如果不可能,如何将方法中得到的结果映射到在另一个类中进行的特定调用? 问题答案: Netty框架设计为异步驱动。使用这种类比,它可以以最少的线程使用量处理大量连接。如果您要创建一个使用netty框架将调用分派到远程位置的api,则应该对调用使用相同的类比。 而不是让api直接返回值,而是
问题内容: 我正在开发一个应用程序,当我从列表中选择一个值(文件)时,应该在另一种形式的jTextPane中打开它。我正在使用两个面板,一个是显示我的列表的mainpanel,另一个是ExcelSheet,当我单击列表值时,mainpanel关闭并显示新表单ExcelSheet,但不显示jTextPane中doc文件的内容。 问题答案: 使用封装,为了显示给定文件更新文本窗格中的代码。您可以从添加
我正在创建一个应用程序,在其中我想阅读所有电子邮件并希望在列表视图中显示。我一直在寻找,但找不到任何合适的方法。我试过下面的代码: 但它返回电子邮件地址,如果我想阅读实际的电子邮件怎么办?有什么办法吗?Android API会公开这一点吗?还有一件事,在下面的一个地方我发现了获取电子邮件的方法 但游标返回 null。我相信没有办法从Android设备读取电子邮件。可能是电子邮件被保存在该应用程序(
我有一个很大的问题,我不知道我是否错过了一些明显的东西或什么,但我不能发现我的错误。我有类SPN、A和B。我重载了2次operator=。我想将A类型或B类型作为参数传递。 它不会抛出任何错误。但是如果我在类B或A中尝试make operator(),则使用参数SPN,如下所示: 它会抛出SPN未命名类型的错误。我甚至不能在A类或B类中创建类SPN对象。也许它不是如何客观编程工作,所以我想得到它,
我们目前正在开发云数据流上的概念验证Apache Beam管道。我们将一些文件(没有文本;自定义二进制格式)放入Google Cloud Buckets,并希望将这些文件作为byte[]读取,并在流中反序列化它们。但是,我们找不到能够读取非文本文件的波束源。唯一的想法是扩展类,但我们认为应该有一个更简单的解决方案,因为这听起来是一个非常简单的任务。 谢谢你们的帮助。
有没有一个清晰的方法,可以很容易地实现扫描本地网络,以获得连接到我的WiFi网络的设备的MAC地址在Android中?谢谢。