Wireshark确认,当尝试使用netty进行写入时,写入的数据永远不会在远端结束。
我努力了:
//Directly using writeAndFlush
channel.writeAndFlush(new Packet());
//Manually flushing
channel.write(new Packet());
channel.flush();
// Even sending bytes won't work:
channel.writeAndFlush(new byte[]{1,2,3});
当我包装它时,没有异常被捕获 try{...}catch(Throwable e){e.printStackTrace();}
我该怎么做才能调试此问题?
Netty是异步的,这意味着在写入失败时它不会引发异常。它不会引发异常,而是返回一个Future<?>
将在请求完成后更新的。确保在第一个调试步骤中记录由此产生的所有异常:
channel.writeAndFlush(...).addListener(new GenericFutureListener<Future<Object>>() {
@Override
public void operationComplete(Future<Object> future) {
// TODO: Use proper logger in production here
if (future.isSuccess()) {
System.out.println("Data written succesfully");
} else {
System.out.println("Data failed to write:");
future.cause().printStackTrace();
}
}
});
或更简单地说:
channel.writeAndFlush(...).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
获得异常的根本原因后,可能会出现多个问题:
unsupported message type: <type> (expected: ...)
注意:
使用时也会抛出此错误ObjectEncoder
,但您的对象未实现Serializable
默认的Netty通道只能发送ByteBuf
s和FileRegion
。您需要通过向管道添加更多处理程序,或将它们手动转换为ByteBuf
s
,将对象转换为这些类型。
A ByteBuf
是字节数组的Netty变体,但具有性能潜力,因为它可以存储在直接存储空间中。
通常使用以下处理程序:
转换
String
用途StringEncoder
转换Serializable
用途ObjectEncoder
(警告,与普通Java对象流不兼容)转换byte[]
用途ByteArrayEncoder
注意: 由于TCP是基于流的协议,因此您通常需要附加某种形式的数据包大小,因为您可能不会收到写入的确切数据包。有关更多信息,请参见Netty
Wiki中的处理基于流的传输。
我正在处理一个需要单点登录的项目。系统A在数据库中查找用户名和密码,系统B仅使用SAML 2.0进行身份验证。在这种情况下,系统B将是服务提供商(SP)。我对SAML SSO相对较新,所以我不能100%确定我的方法是正确的。我猜系统A必须是IDP。用户将登录系统A,并在成功登录后将更多信息发布到系统B以完成SSO过程。这是否准确?
我需要与GitHub集成API进行交互,但具体是从。NET 4.0,所以我不能使用Octokit。 基本上,我得到了一个格式化的私有rsa密钥(标准不支持。NET API),并且必须发送RS256 jwt令牌才能获得与API交互的身份验证令牌。 提供了以下ruby示例代码: 使用下面的curl示例 以及以下Result示例:
我创建了一个构建html字符串作为电子邮件正文的代码。然而,我希望这封电子邮件是我的一般和基础电子邮件,我在第一个地方创建的附件。下面的代码实际上是有效的,但在最后,当我打开我的普通电子邮件时,我将第二封电子邮件作为附件,但当我单击它时,附件中的电子邮件是Black电子邮件。尽管我创建了html主体,但结果仍然如此。html字符串在最后一个方法“AddMessageAsAttachment”的末尾
我想了解Netty频道选项“WRITE_SPIN_COUNT”的用法。将此值设置为高于或低于默认值(16)的效果是什么。这个应该设置吗。?这是我从Netty文档中获得的信息,但不清楚为什么以及何时应该设置此值:http://netty.io/4.0/api/io/netty/channel/DefaultChannelConfig.html#getWriteSpinCount()根据文档说明:返回
问题内容: 您好,我有一个带有处理程序的Netty Server,该处理程序应接受字符串。似乎最多只能接收1024个字节的内容。我如何增加缓冲区大小。我已经尝试过 没有成功。 处理程序如下 } 问题答案: 您正在使用UDP吗?如果是这样,数据包将最大为1024字节。此代码注释在QOTM代码示例中: 允许的数据包最大为1024字节(默认值为768)。您可以增加或减小此值,以避免数据包被截断或分别改善
我正在用纯javascript为.NET 6中的最小API发出请求,但是当我在浏览器中打开它时,我收到以下消息: “获取”的访问权限https://localhost:7252/v1/todosCORS策略已阻止“来自源”的“null”:请求的资源上不存在“访问控制允许源”标头。不透明响应满足您的需求,将请求的模式设置为“无cors”以获取禁用cors的资源。 我已经在API中添加了CORS配置,