【问题标题】:Netty File ServerNetty 文件服务器
【发布时间】:2012-07-14 13:29:38
【问题描述】:

我一直在浏览 HTTP 文件服务器和上传服务器上的示例。

我正在编写一个文件服务器,它可以同时做:发送和接收文件。但我不确定如何合并 2 个管道。 或者我可能需要根据命令(上传或获取文件)修改它们。即使文档声明一旦建立通道就无法修改管道,我看到“端口统一”示例确实会根据数据对其进行修改。

任何帮助将不胜感激。

【问题讨论】:

  • shg;我认为您误解了文档。您可以随时更改管道。管道也是线程安全的
  • 如此处所述:link 对于每个新通道,必须创建一个新管道并将其附加到该通道。一旦连接,通道和管道之间的耦合是永久的;通道不能将另一个管道附加到它,也不能从它分离当前管道。
  • 我猜想从管道中添加或删除处理程序是可能的。感谢您的评论。

标签: java netty fileserver


【解决方案1】:

听起来您需要一个 HTTP 服务器,并区分用于将文件下载到客户端的 HTTP GET 和用于将文件上传到服务器的 POST,而不是使用管道来区分类型。查看HttpStaticFileServerHandler 以使用GET 请求下载文件。你需要适应的是messageReceived的第一行:

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    HttpRequest request = (HttpRequest) e.getMessage();

    if (request.getMethod().equals(HttpMethod.POST)) {
        // receive uploaded file
        return;
    }

    if (request.getMethod() != GET) {
        sendError(ctx, METHOD_NOT_ALLOWED);
        return;
    }

    ...

【讨论】:

  • 谢谢。是的,我认为我需要在 messageReceived 中区分该点的请求,但由于发送和上传的管道不同(在示例中),我不太确定它们是否会兼容。我会试验看看。
【解决方案2】:

我认为您需要将您的应用视为 2 个子应用。

第一个子应用是文件服务器。您需要根据Http file server example 引导并为此创建管道。

第二个子应用是上传客户端。您需要根据http client example 单独引导和创建管道。

【讨论】:

  • 如果我理解正确,您是建议创建一个常规服务器和一个上传服务器,以及它们对应的客户端?他们也应该进入 2 个不同的端口。有没有办法创建一个可以发送和接收文件的 HTTP 文件服务器?即使这意味着一些动态管道处理?
  • Http 服务器只响应请求。如果您想通过 http post 开始发送文件(我从您的问题中了解到),我的理解是您需要实现一个 http 客户端。
  • 谢谢。是的,事实上,我不打算使用浏览器,它将是一个 p2p 应用程序。我想知道我是否需要 2 个不同的客户端,一个用于上传,一个用于下载,或者一个就足够了。
  • 如果您正在构建一个发起请求的客户端,那么 1 就足够了。如果您打算侦听和响应传入的请求,则只需要一个服务器。
  • 我刚刚注意到AsyncHttpClient的存在,它基于Netty,大大简化了客户端开发。我想我将只专注于使用 Netty 制作一台服务器,并使用这个库制作客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多