代码之家  ›  专栏  ›  技术社区  ›  DuduAlul

Web服务器的实现[关闭]

  •  3
  • DuduAlul  · 技术社区  · 16 年前

    我想用纯Java实现我自己的Web服务器。 Web服务器应该只支持静态资源(即HTML、JS、CSS、pics、movies等)。

    你能推荐一个关于如何实现这样一个东西的教程或文章吗? 我应该使用很少的进程或线程池,还是应该考虑像nodejs那样面向循环事件?

    我知道有免费的网络服务器可以完全满足我的需求,但我想把它作为我自己的练习。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Alain O'Dea    16 年前

    我建议您熟悉HTTP请求格式 http://datatracker.ietf.org/doc/rfc2616/ . 从头开始实现HTTP并不是一个小的壮举,但它确实是一个很好的学习练习。

    在Java内部,为了简单起见,我建议使用每个请求服务器的线程。 http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html -使用 java.nio 提供文件。在并发设置中 贾瓦尼奥 最好是 java.io 因为它能更好地平衡负载。你很可能会发现基准表明 贾瓦伊奥 速度更快,但这适用于顺序单线程代码。

        2
  •  3
  •   zoomer.hammerball    16 年前
        3
  •  3
  •   Borealid    16 年前

    如果您将此作为练习,我建议您使用事件驱动模型。

    我不认为有一个关于这个主题的教程,因为所需的知识范围很广-HTTP协议、文件访问、线程和并发、配置文件管理、套接字通信、日志记录、错误处理、mime类型…是的,即使只是共享静态资源,这仍然是一个很大的问题。

    读起来,祝你好运!

        4
  •  1
  •   Thorbjørn Ravn Andersen    16 年前

    您可能会发现AcmeWeb服务器作为一个起点很有趣。我们将其用于临时文件传输。当你熟悉了它之后,你会发现它的瓶颈,然后思考如何解决它:)

    http://acme.com/java/software/Acme.Serve.Serve.html

        5
  •  0
  •   f1sh    16 年前

    我建议 Apache MINA 做这项工作。它允许您指定编码器/解码器来正确处理HTT协议,并在请求到达时调用方法等。它在内部处理线程管理。没有网络项目,我永远不会启动。