我试图通过“网络在行动”这本书来掌握网络概念。
在我看来,有几个概念解释得不太好或太模糊。因此,我想我会来这里就这些话题做一些明确的解释。
渠道管道:
所以我有一个这样的渠道管道:
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("decoder", new decodeHandler());
pipeline.addLast("encoder", new encodeHandler());
pipeline.addLast("timeout", new IdleStateHandler(60, 0, 0));
pipeline.addLast("handler", handler);
}
对于channelInitializer,从概念上讲,我会假设该过程将按以下顺序进行:
解码器 -
为什么处理程序在管道的最后?这是因为编码器对消息进行编码,处理程序对其进行处理并将其推送到上游/客户端吗?
频道处理程序:
对我来说,这是整个网络中最令人困惑的部分。因此,使用解码器,netty 书对解码参数的解释如下:
这是您必须实现的唯一抽象方法。使用包含传入数据的ByteBuf和添加解码消息的List调用decode()。重复此调用,直到确定没有新项添加到List或ByteBuf中没有更多字节可读。然后,如果List不为空,则将其内容传递给管道中的下一个处理程序。
这一切对我来说都是有道理的。但是,令人困惑的部分是最后一句话。内容究竟如何传递到下一个处理程序?例如,我看到通道处理程序上下文写入数据,如下所示:
ctx.channel().alloc().write(response)
然而,然后我们也这样做
out.add(new Response());
我不知道为什么我们直接写入通道,有时会将可读对象添加到
out
列表变量中。
所以我的问题是,我们什么时候写入绑定到上下文的通道(即
ctx.channel(). write()
,而不是通过out
变量传递数据。因为我在代码中看不到out
变量被传递到下一个处理程序的位置。它只是将对象添加到其中,仅此而已。留档没有显示它是如何传递的。我知道管道是一个双向链接列表。所以什么代码语句会增加管道中的指针。例如,我想应该是这样的。
decode(){
//decode message
//increment pointer of pipeline and pass out variable to next handler (or new pointer location)
}
任何帮助和澄清都将不胜感激。
decode -
我正在尝试使用动态ChannelHandler管道实现Netty 4. X。正如人们建议的“出于性能考虑,在运行时使用调用而不是管道修改”,我实现了一个Server、一个RouterInoundHander和一个Client来测试这个理论。但它不起作用。这是我的代码 计算机网络服务器 RouterInboundHandler 和客户 如代码所示,在Channel的连接初始化阶段创建了Channel
问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,
我正在学习Netty并制作一个通过TCP发送对象的简单应用程序的原型。我的问题是,当我用我的消息从服务器端调用时,它似乎没有到达管道中的处理程序。当我从客户端向服务器发送消息时,它按预期工作。 这是代码。 服务器: 双工通道处理程序: 最后是编码器(解码器类似): 客户端: 和处理程序: 当我通过服务器端的控制台发送消息时,我得到了输出: 因此,看起来似乎在客户端发送了消息,但没有收到任何消息。
问题内容: 目前,我尝试使用Go创建一个小型Web项目,以在服务器上进行数据处理。 我尝试将数据库连接传递给我的HandlerFunc(tions),但是它没有按预期工作。我对golang相当陌生,因此也许我不了解该lang的一些基本原理。 我的主要功能如下: 我的路由器: 和我的路线: 所以-如何将我的“ env”(或env.DB)传递给FuncHandlers?我尝试了很多东西,但没有一个起作
问题内容: 我使用React Router的React.js应用程序具有以下结构: 我想将一些属性传递给组件。 (通常我会这样做) 用React Router做到这一点最简单,正确的方法是什么? 问题答案: 更新 自新版本发布以来,无需使用包装器就可以直接通过组件传递道具。例如,通过使用prop。 零件: 用法: 旧版本 我的首选方式是包装组件并将包装器作为路由处理程序传递。 这是您应用了更改的示
问题内容: 我有一个SOAP消息处理程序,它能够获取Web服务响应的原始XML。我需要将此XML放入Web服务客户端,以便可以在响应发送之前对响应执行一些XSL转换。我在寻找一种从SOAP处理程序获取数据的好方法方面遇到了麻烦,该SOAP处理程序捕获传入的消息,并使原始XML可用于生成的(从WSDL)Web服务客户端。有什么想法甚至可行吗? 我想出了这样的东西: 在非常简单的测试中,这似乎可行。但