loServer

基于Netty的Http应用服务器
授权协议 Apache
开发语言 Java
所属分类 服务器软件、 应用服务器
软件类型 开源软件
地区 国产
投 递 者 景成和
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

loServer

基于Netty的Http应用服务器

介绍

在之前公司的时候有一些小任务是这样的:写一个小Http接口处理一些任务(这个任务常常只需要几行代码)。然后我就开始写个简单的Servlet,挂在Tomcat上。随着时间的推移,Tomcat上的这种小web项目越来越多,最后要更新一个项目就要重新启动Tomcat(没有设置热启动),非常笨重。领导意思是不要写啥都挂在Tomcat上,最好写的这个功能可以独立运行提供服务。于是需求就来了,找个嵌入式的Servlet容器(记得当时年纪小,摆脱不了Servlet容器了……),貌似满足要求的就是Jetty了,也没折腾,后来就不了了之了。

现在想想面对一些压力并不大的请求,可以自己实现一个Http应用服务器来处理简单的Get和Post请求(就是请求文本,响应的也是文本或json),了解了下Http协议,发现解析起来写的东西很多,而且自己写性能也是大问题(性能这个问题为未来考虑),于是考虑用Netty,发现它有Http相关的实现,便按照Example的指示,自己实现了一个应用服务器。思想很简单,在ServerHandler中拦截请求,把Netty的Request对象转换成我自己实现的Request对象,经过用户的Action对象后,生成自己的Response,最后转换为Netty的Response返回给用户。

这个项目中使用到的Netty版本是4.X,毕竟这个版本比较稳定,而且最近也在不停更新,于是采用了。之后如果有时间,会在项目中添加更多功能,希望它最终成为一个完善的高性能的Http服务器。

使用方法

  1. 新建一个类实现Action接口,例如我新建了一个ExampleAction

  2. 调用ServerSetting.addAction("/example", ExampleAction.class);增加请求路径和Action的映射关系

  3. ServerSetting.setPort(8090);设置监听端口

  4. LoServer.start();启动服务

  5. 在浏览器中访问http://localhost:8090/example既可

代码

package com.xiaoleilu.loServer.example;

import com.xiaoleilu.loServer.LoServer;
import com.xiaoleilu.loServer.Request;
import com.xiaoleilu.loServer.Response;
import com.xiaoleilu.loServer.ServerSetting;

/**
 * loServer样例程序<br>
 * Action对象用于处理业务流程,类似于Servlet对象<br>
 * 在启动服务器前必须将path和此Action加入到ServerSetting的ActionMap中<br>
 * 使用ServerSetting.setPort方法设置监听端口,此处设置为8090(如果不设置则使用默认的8090端口)
 * 然后调用LoServer.start()启动服务<br>
 * 在浏览器中访问http://localhost:8090/example?a=b既可在页面上显示response a: b
 * @author Looly
 *
 */
public class ExampleAction implements Action{

    @Override
    public void doAction(Request request, Response response) {
        String a = request.getParam("a");
        response.setContent("response a: " + a);
    }

    public static void main(String[] args) {
        ServerSetting.addAction("/example", ExampleAction.class);
        ServerSetting.setPort(8090);
        LoServer.start();
    }
}
  • 列举SQL Server中的数据库名称、某一数据库的中表名 *----------------------------------- 方法一: 调用系统数据库 MASTER 中的存储过程 sp_helpdb 即可,如下: lnsqlhandle=SQLSTRINGCONNECT("driver=SQL Server;server=计算机名;uid=sa;pwd=;database=master")

 相关资料
  • 关于netty的第二个问题。我们只是从它开始。我们有一个设计,我们需要使用 <罢工> 具有长轮询的HTTP HTTP流。我们估计5k-50k连接的用户打开连接。我们知道tomcat不会处理,所以我们看着netty完成任务。 设计应该足够简单,但我们不能使用websocket(我们希望在netty上使用hornetQ,并提供websocket/stomp支持),但我们不能。 因此,基本上,我们将在连

  • 问题 你想在网络上创建一个 HTTP 服务器。在这个方法中,我们将逐步从最小的服务器成为一个功能键值存储。 解决方案 我们将使用 node.js HTTP 库并在 Coffeescript 中创建最简单的 web 服务器。 开始 'hi\n' 我们可以通过导入 node.js HTTP 模块开始。这会包含 createServer ,一个简单的请求处理程序返回 HTTP 服务器。我们可以使用该服务

  • 我不确定如何处理这个问题,http响应状态取决于我需要阅读的主体。我有这样的想法: 但为了获得阅读正文所需的状态,我看不到任何使用发布者提供的值的选项。我如何使其能够调用上面的方法,并在创建NetYoutBound时使用该状态

  • 让我们用async/.await建立一个回声服务器! 开始之前,运行rustup update stable,以确保你有 stable Rust 1.39 或更新的版本。一旦完成,就cargo new async-await-echo创建新项目,并打开输出的async-await-echo文件夹。 让我们将一些依赖项,添加到Cargo.toml文件: [dependencies] # The la

  • 我想避免使用WebViews从Google获取OAuth代币。(要求用户分享他的联系人、个人资料信息等)。为此我使用了Google Play服务API。 由于我的应用程序是基于云的(逻辑发生在云中),我必须将这些令牌保存在云中。我还必须让用户从多个设备登录(每次从新设备登录时都不需要向他询问谷歌权限) 我试图实现这个谷歌博客中提到的技术。 我尝试了博客中提到的方法。它并没有完全如我所愿工作。我还检

  • 我在我的项目中使用微服务架构。对于服务间通信,我使用消息队列NATS。我写了一个网关,处理所有超文本传输协议请求,并将其放入队列。所有终端服务都订阅到这个队列。 在endpoint服务中,我使用基于Netty IO的Xitrum。当我从队列中得到请求时,我将其反序列化为FullHttpRequest。但我不知道如何将它发送到我的netty服务器,它可以根据业务逻辑处理它(例如,不使用可以将它发送到