精华内容
下载资源
问答
  • 工程背景:springboot + netty(如果单纯的springboot同样适用) 工程打包,包括:工程IP的更换,数据库IP地址更换。 工程上传到指定服务器,数据库导入服务器数据库管理系统。 通过命令运行服务器中上传的工程包。 ...

    部署前猜想

    1. 工程背景:springboot + netty(如果单纯的springboot同样适用)
    2. 工程打包,包括:工程IP的更换,数据库IP地址更换。
    3. 工程上传到指定服务器,数据库导入服务器数据库管理系统。
    4. 通过命令运行服务器中上传的工程包。
    5. 测试是否部署成功:controller、TCP两方验证。
    6. 流程:本地工程文件上传到服务器,然后通过xx方法启动,然后能正常访问。

    部署实战

    一、 本地打包测试

    		(开发环境、打包工具、只需上网搜索对应方法即可,下图是idea通过插件打包)
    

    1)首先:原工程什么都不改,直接通过idea右侧的maven,最好先执行下图1清除一下工程中target文件(非必需)。找到package打包工具(可用其他方法)。执行完打包后会在工程target中生成XX.jar文件。 --此过程可能出现错误,按照类型解决即可。

    在这里插入图片描述

    2)其次:把生成的XX.jar文件随便放到一个地方,然后执行 java -jar XX.jar 命令,如果能正常启动且能访问到工程资源标志打包成功。 --此过程可能出现错误,按照类型解决即可;

    总结:把工程打包成jar包,通过 java -jar XX.jar运行,看是否和在开发工具中效果一样。效果一样说明打包逻辑没有问题,可以进入下一步。

    二、正式打包

    不同的是无非是地址的更换(通过全局替换快捷键完成:127.0.0.1或localhost–>XX IP),一个是私有地址,一个是公有地址,你可以浅显的认为我买了服务器就是买了一个公有IP(只是为了站的更高让别人能够看见我);

    三、 MySQL文件

    导出数据库管理系统中对应的数据库SQL文件(如navicat for mysql -->找到数据库,点击右键转储为SQL文件);

    四、上传打出的jar包和SQL文件到服务器

    1)工具说明:
    Xshell: 看成连接服务器的一个工具
    Xftp:看成本地文件上传到服务器的一个工具
    只要能完成需求什么工具均可。

    使用一:点击下图中1新建会话,名称随意,IP即你需要连接的服务器IP,其他默认然后确定,这时就会提示让你输入用户名和密码,输入完成后进入服务器Linux系统。

    在这里插入图片描述

    使用二:下图为Xshell的工具栏,找到文件传输点击(或者直接启动Xftp软件也可):
    在这里插入图片描述

    下图为Xftp传输界面,直接通过windwos中快捷键Ctrl + c等完成本地文件夹到服务器文件夹即可。

    在这里插入图片描述
    2)资源上传:XX.jar(工程打出的包)、XX.sql(工程所需的SQL文件),通过上面工具即可完成。

    五、资源文件使用

    XX.jar包:
    1)启动:java -jar XXX.jar
    如果报错,那就根据错误找解决方法即可,比如:此处我出现了端口错误,因为本地工程用到的是8888端口,那么按照逻辑去开放端口即可(网上搜索Linux开放端口方法),如果你用到了其他的端口可同理开放。
    2)开放端口
    1 查询已开放端口:firewall-cmd --list-ports
    2 开启端口: firewall-cmd --zone=public --add-port=8888/tcp --permanent
    3 检查是否开启成功:firewall-cmd --list-ports,通常不成功,因为需要重启防火墙。
    4 重启防火墙相关命令:systemctl start/stop/status/reload firewalld 开启/关闭/状态/重启 防火墙
    5 再次检查端口是否开启成功: firewall-cmd --list-ports
    6 登陆阿里云,配置需要开放的端口。–否则会出现项目正常启动但是本地无法访问的情况。

    XX.sql文件
    1) 启动数据库
    1 查看MySQL状态:service mysql status
    2 MySQL启动命令:service mysql start
    3 启动后连接数据库: mysql -u 数据库名字 -p
    4 输入密码,按照安装mysql时设置的密码操作即可。

    在这里插入图片描述

    2) 导入XX.sql文件到数据库管理系统

    ​ 1 登陆数据库后,创建数据库:create database xxx;
    这里的xxx要和本地导出的SQL文件名字相同(Linux中SQL命令末尾以分号结尾)。

    在这里插入图片描述

    ​ 2 切换到新建好的数据库:user xxx;

    ​ 3 导入SQL文件到数据库管理系统:source 文件位置;如在步骤四中通过资源上传步骤把SQL文件存放在服务器 /opt 文件下,那此处命令对应:source /opt/XX.sql 即可完成SQL文件导入到服务器数据库中。

    六、测试
    1)测试启动:通过java -jar XXX.jar 启动命令,启动上传到服务器的jar工程。1599210057957)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200904152438437.png)]

    2)测试本地访问:通过:IP:端口号/工程路径 如此处:ip:8888/bms/swagger-ui.html。

    在这里插入图片描述

    3)测试本地TCP连接:通过上步已经完成了基本的部署和调试,下图是netty的TCP调试,如果只是springboot不需要此步。
    在这里插入图片描述

    总结:部署前的猜想,逻辑上基本正确,分为:项目打包、SQL文件导出、项目和SQL文件导入到服务器中、通过命令在服务器运行即可,在这个过程中会有工具使用如怎么连接服务器、怎么上传文件等,同时需要掌握Linux相关命令(前提是你大概知道这步需要做什么,然后就搜对应的指令),当然在部署过程中会遇到不同类型的问题,这些问题基本都是配置上的问题,按照错误提示进行修改即可,实在不行就去网上借鉴一下别人的经验。

    展开全文
  • netty java 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 Netty是一个无阻塞输入/输出(NIO)框架,它使开发低级...

    netty java

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。

    Netty是一个无阻塞输入/输出(NIO)框架,它使开发低级网络服务器和客户端变得相对简单。 Netty为需要在套接字级别上工作的开发人员提供了令人难以置信的强大功能,例如在开发客户端和服务器之间的自定义通信协议时。 它支持SSL / TLS,具有阻塞和非阻塞统一API,以及灵活的线程模型。 它又快又高效。

    Netty的异步,非阻塞I / O模型是为高度可扩展的体系结构设计的,与类似的阻塞模型相比,它可能允许更高的吞吐量。 基本上,非阻塞服务器在单个线程上异步运行所有请求(没有函数应“阻塞”事件循环)。 这与阻塞服务器模型形成对比,后者通常在单独的线程上运行每个请求。 通过不必在负载增加时切换线程或创建新线程,非阻塞模型可以减少开销,并随着流量增加而更快地进行扩展。

    但是,所有这些功能都是以复杂性为代价的。 非阻塞代码通常更难阅读,测试和维护,尽管随着异步范例的成熟,非阻塞代码已大大改善。 由于Netty在套接字级别工作,因此还需要更深入地了解诸如线程循环,字节缓冲区和内存管理之类的细节。

    Netty.io团队做了出色的工作,使Netty的所有功能易于使用,但是它仍然比高级库(例如Spring Boot WebFlux)更加复杂。 那么为什么要使用它呢?

    Netty旨在使自定义网络协议的实现相对容易。 HTTP很不错,但是它是一种通用协议,基本上适合大多数情况。 但是,如果您始终在服务器和客户端之间来回传递自定义的结构化数据(大型文件,流媒体,实时游戏数据等),则可以做得更好。 Netty允许您编写适合自己特定需求的自己的网络协议,针对特定情况优化流量,而没有HTTP或FTP之类的不必要开销。

    但是,即使您不打算编写自己的自定义TCP协议,也可以使用Netty的功能。 Spring WebFlux是Spring对非阻塞和React式编程的解答。 它是传统(阻塞)Spring MVC体系结构的替代方案。 默认情况下,Spring Boot WebFlux Starter在嵌入式Netty服务器上运行。 在此配置中,您可以将WebFlux视为基于Netty的NIO套接字优势构建的React性,非阻塞HTTP应用程序层。

    在本教程中,您将在Netty中创建一个基本的“ Hello world”应用程序。 接下来,您将在Spring Boot WebFlux中创建相同的“ Hello world”应用程序。 最后,您将使用Okta作为OAuth 2.0提供程序将OAuth 2.0登录名添加到应用程序中。

    安装项目依赖项

    在开始之前,该项目需要安装一些必需的工具。

    Java 11 :该项目使用Java11 。您可以按照OpenJDK网站上的说明或使用SDKMAN来安装OpenJDK。

    HTTPie :这是一个简单的命令行实用程序,用于发出将用于测试REST应用程序的HTTP请求。 Okta开发人员也喜欢它。 按照其网站上的说明进行安装

    Okta开发人员帐户 :您将Okta用作OAuth / OIDC提供程序,以向应用程序添加OAuth2登录身份验证。 如果尚未注册免费的Okta开发者帐户 ,请注册。

    您还应该继续克隆该博客的GitHub存储库

    <

    git clone https://github.com/oktadeveloper/okta-netty-webflux-example.git

    该项目包含三个子目录,分别对应于本教程的三个部分:

    1. netty-hello-world :如何创建Netty服务器的非常基本的示例
    2. webflux-hello-world :如何在Spring WebFlux中创建相同的服务器
    3. webflux-oauth2login :如何将OAuth2登录添加到Spring WebFlux应用程序的示例

    使用Netty构建HTTP服务器

    HTTP服务器是HTTP协议(OSI第7层)的应用层实现,因此在Internet堆栈中相对较高。 如果您正在开发REST API, 那么您将在为您提供此实现的API的基础上进行开发 。 相比之下,Netty并不一定要构建通信,提供会话管理甚至提供像TLS这样的安全性。 如果您要构建超低级网络应用程序,那就太好了; 但是,如果您正在构建REST服务,则可能不是最佳选择。

    幸运的是,Netty API还提供了一些帮助程序类和函数,这些类和函数使我们能够轻松集成更高级别的协议(例如HTTP)。 在本部分的教程中,您将使用它们来构建一个简单的HTTP服务器。

    在您喜欢的IDE或文本编辑器中打开netty-hello-world项目。

    首先,查看src/main/java/com/okta/netty/AppServer.java文件。 此类是应用程序的入口点,用于设置Netty服务器。

    package com.okta.netty;  
    
    ...
    
    public class AppServer {  
      
        private static final int HTTP_PORT = 8080;  
      
        public void run() throws Exception {  
      
            // Create the multithreaded event loops for the server
            EventLoopGroup bossGroup = new NioEventLoopGroup();  
            EventLoopGroup workerGroup = new NioEventLoopGroup();  
      
            try {  
                // A helper class that simplifies server configuration           
                ServerBootstrap httpBootstrap = new ServerBootstrap();  
                
                // Configure the server
                httpBootstrap.group(bossGroup, workerGroup)  
                    .channel(NioServerSocketChannel.class)  
                    .childHandler(new ServerInitializer()) // <-- Our handler created here  
                    .option(ChannelOption.SO_BACKLOG, 128)  
                    .childOption(ChannelOption.SO_KEEPALIVE, true);  
      
                // Bind and start to accept incoming connections.  
                ChannelFuture httpChannel = httpBootstrap.bind(HTTP_PORT).sync(); 
                
                // Wait until server socket is closed
                httpChannel.channel().closeFuture().sync();  
            }  
            finally {  
                workerGroup.shutdownGracefully();  
                bossGroup.shutdownGracefully();  
            }  
        }  
      
        public static void main(String[] args) throws Exception {  
            new AppServer().run();  
        }  
          
    }

    最重要的一行是.childHandler(new ServerInitializer()) ,它创建ServerInitializerServerHandler并挂接到Netty服务器。

    接下来查看src/main/java/com/okta/netty/ServerInitializer.java 。 此类配置Netty通道,该通道将处理我们的请求并将其连接到ServerHandler

    package com.okta.netty;  
      
    ...
    
    public class ServerInitializer extends ChannelInitializer<Channel> {  
      
        @Override  
        protected void initChannel(Channel ch) {  
            ChannelPipeline pipeline = ch.pipeline();  
            pipeline.addLast(new HttpServerCodec());  
            pipeline.addLast(new HttpObjectAggregator(Integer.MAX_VALUE));  
            pipeline.addLast(new ServerHandler());  
        }  
          
    }

    最后,有src/main/java/com/okta/netty/ServerHandler.java 。 这是映射实际请求并生成响应的地方。

    package com.okta.netty; 
     
    ...
      
    public class ServerHandler extends SimpleChannelInboundHandler
       
         {  
          
        @Override  
        protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest msg) {  
            ByteBuf content = Unpooled.copiedBuffer("Hello World!", CharsetUtil.UTF_8);  
            FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, content);  
            response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html");  
            response.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes());  
            ctx.write(response);  
            ctx.flush();  
        }  
          
    }
    
       

    在此类中,请注意,您必须将响应字符串转换为字节缓冲区。 实际上,您会生成一个HTTP响应并直接设置一些标头。 这是Internet的应用层(OSI第7层)。 调用ctx.write(response) ,它将响应作为字节流通过TCP发送。 Netty团队在保持低水平的传输协议的同时,为隐藏大量的复杂性做了出色的工作。

    测试您的Netty应用

    要测试此Netty应用程序,请从项目根目录netty-hello-world运行:

    ./gradlew run

    一旦应用程序完成了加载,就从另一个外壳程序中,使用HTTPie执行GET请求:

    $ http :8080
    
    HTTP/1.1 200 OK
    content-length: 12
    content-type: text/html
    
    Hello World!

    那是Netty内置的简单HTTP服务器。 接下来,您将爬上梯级的抽象阶梯,并使用Spring Boot和WebFlux简化操作。

    在Netty上向WebFlux打个招呼

    如前所述,WebFlux是Spring MVC的无阻塞替代方案。 它通过事件驱动,异步和非阻塞方法来处理请求,从而支持React式编程。 它还提供了许多功能性API。 Reactor是与Spring紧密合作开发的React性服务器端Java库,提供了WebFlux的React流方面。 但是,您也可以使用其他React式流库。

    回想一下,默认情况下,Spring Boot WebFlux启动程序在Netty服务器上运行。 在下一个示例中,您会注意到Spring Boot隐藏了多少复杂性。

    Spring Boot WebFlux项目位于GitHub存储库的webflux-hello-world子目录中。 非常简单。

    看一看ReactiveApplication类。 这是准系统的标准Spring Boot应用程序类。 它只是利用public static void main()方法和@SpringBootApplication来启动整个Spring Boot应用程序框架。

    src/main/java/com/okta/webflux/app/ReactiveApplication.java

    package com.okta.webflux.app;  
      
    ... 
      
    @SpringBootApplication  
    public class ReactiveApplication {  
      
       public static void main(String[] args) {  
          SpringApplication.run(ReactiveApplication.class, args);  
       }  
      
    }

    ReactiveRouter是一个简单的路由器类,它将HTML端点与处理程序方法链接在一起。 您可以看到它使用依赖注入将ReactiveHandler传递给路由器bean,该bean为/路由定义了一个端点。

    src/main/java/com/okta/webflux/app/ReactiveRouter.java

    package com.okta.webflux.app;  
      
    ...
      
    @Configuration  
    public class ReactiveRouter {  
      
        @Bean  
        public RouterFunction
       
         route(ReactiveHandler handler) {  
      
            return RouterFunctions  
                .route(RequestPredicates  
                    .GET("/")  
                    .and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), handler::hello);  
        }  
    }
    
       

    ReactiveHandler同样简单。 它定义了一个返回纯文本的处理函数。 Mono<ServerResponse>返回类型是一种特殊类型,用于返回一个元素的流。 查看有关了解React类型的Spring文档,以了解有关返回类型的更多信息。 如果您习惯使用Spring MVC,则这可能是WebFlux更不熟悉的方面之一。

    package com.okta.webflux.app;  
      
    ...
      
    @Component  
    public class ReactiveHandler {  
      
        public Mono<ServerResponse> hello() {  
            return ServerResponse  
                .ok()  
                .contentType(MediaType.TEXT_PLAIN)  
                .body(BodyInserters.fromObject("Hello world!"));  
        }  
          
    }

    打开一个外壳,然后导航到项目的webflux-hello-world子目录。

    使用以下项目运行项目: ./gradlew bootRun

    打开另一个外壳以使用http :8080测试端点。

    HTTP/1.1 200 OK
    Content-Length: 12
    Content-Type: text/plain
    
    Hello world!

    看到使用Spring Boot比Netty简单多少?

    创建一个OpenID Connect(OIDC)应用程序

    接下来,您将使用OAuth 2.0登录名来保护应用程序。 这听起来可能很复杂,但是不用担心。 Spring和Okta密谋使其变得非常简单!

    Okta是SaaS(软件即服务)身份验证和授权提供者。 我们为开发人员提供免费帐户,因此您可以轻松开发OIDC应用程序。 前往developer.okta.com并注册一个帐户。

    验证电子邮件后,登录并执行以下步骤(如果这是您第一次登录,则可能需要单击黄色的“ 管理”按钮才能进入开发人员仪表板):

    • 转到应用程序 > 添加应用程序
    • 选择应用程序类型Web ,然后单击下一步
    • 为应用命名。 我将其命名为“ WebFlux OAuth”。
    • 登录重定向URI下, 值更改为http://localhost:8080/login/oauth2/code/okta 。 其余的默认值将起作用。
    • 单击完成

    请注意底部的客户端ID客户端密钥 。 稍后您将需要它们。

    使用OAuth 2.0保护您的应用安全

    在Okta上创建OIDC应用程序后,需要在项目中进行一些更新。 如果您想跳过本部分教程的完成项目,可以在webflux-oauth2login子目录中找到,但是我将向您展示如何修改webflux-hello-world以添加login

    首先,将Okta Spring Boot Starter添加到Gradle构建文件中。 我们一直在努力使这一过程尽可能容易,并且Okta Spring Boot Starter简化了OAuth配置。 看看入门的GitHub项目,了解更多信息。

    将以下依赖项添加到build.gradle文件的依赖项块中:

    dependencies {  
        ...
        implementation 'com.okta.spring:okta-spring-boot-starter:1.3.0'
    }

    接下来,将以下属性添加到src/main/resources/application.properties文件。 您需要将括号中的值替换为您自己的Okta域和客户端ID。

    您可以通过打开Okta开发人员仪表板并转到API > 授权服务器并在默认服务器的表中查找来找到您的Issuer URI。 客户端ID和机密来自您刚才创建的OIDC应用程序。

    okta.oauth2.issuer={yourIssuerUri}
    okta.oauth2.client-id={yourClientId}
    okta.oauth2.client-secret={yourClientSecret}

    现在运行应用程序: ./gradlew bootRun

    注销您的Okta开发人员帐户或使用隐身窗口并浏览至(在浏览器中): http:// localhost:8080

    系统将指导您使用Okta帐户登录。

    登录后,您将被重定向回该应用程序。 是的-成功!

    了解有关Netty,Spring Boot和OAuth 2.0的更多信息

    在本教程中,您使用Netty创建了一个基本的“ Hello world”应用程序。 您已经看到Netty是一个用于创建TCP和UDP网络协议的超强大框架。 您已经了解了它如何支持非阻塞IO,以及Spring WebFlux如何在Netty之上构建以提供React性,非阻塞HTTP应用程序框架。 然后,您在WebFlux中构建了一个“ Hello world”应用程序,此后,您使用Okta作为OAuth 2.0 / OIDC提供程序来向该应用程序添加OAuth 2.0登录名。

    您可以在oktadeveloper / okta-netty-webflux-example上在GitHub上查看本教程的完整代码。

    除了WebFlux,在Netty之上还构建了一些强大的网络框架。 Apple最近开放了ServiceTalk的源代码, ServiceTalk是一个支持HTTP,HTTP / 2和gRPC的React性微服务客户端/服务器库。 还有一个Armeria ,一个基于Java 8,Netty,Thrift和gRPC构建的开源异步HTTP / 2 RPC / REST客户端/服务器库。 它的主要目标是帮助工程师构建高性能的异步微服务。

    如果您想了解有关Spring Boot,Spring WebFlux和OAuth 2.0的更多信息,请查看以下有用的教程:

    如果您对此帖子有任何疑问,请在下面添加评论。 有关更多精彩内容, 请在Twitter上关注@oktadev或订阅我们的YouTube频道

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。


    翻译自: https://www.javacodegeeks.com/2020/01/a-quick-guide-to-java-on-netty.html

    netty java

    展开全文
  • JAVA Netty开发部标JT1078流媒体服务器

    千次阅读 2019-02-21 11:33:18
    实现目标 ... 整体架构 JDK8,SpringBoot2,Netty,websocket,Redis,RabbitMQ,Protobuf。 架构说明 采用SpringBoot2可以简化配置实现自动配置,使用多...Netty作为JAVA网络编程最强的开源框架,综合性能达到最优,...
    实现目标

    支持JT1078实时视频,支持客户端http-flv和websocket-flv播放。

    整体架构

    JDK8,SpringBoot2,Netty,websocket,Redis,RabbitMQ,Protobuf。

    架构说明
    • 采用SpringBoot2可以简化配置实现自动配置,使用多环境配置使部署更简便,开发效率大大提高。
    • Netty作为JAVA网络编程最强的开源框架,综合性能达到最优,使用它开发JT1078服务端、http-flv服务端。
    • websocket开发websocket-flv服务端。
    • Redis缓存终端信息、上线终端、实时位置等。
    • RabbitMQ作为各模块通信的通道,可以传输位置、图片、上下行指令等。
    • Protobuf作为RabbitMQ的序列化传输协议,序列化性能和传输大小远胜JSON。
    技能提升

    通过此项目能够学会:

    1. 用JAVA最前沿技术开发web和socket通信程序,领略SpringBoot和Netty的强大魅力。
    2. 学会JDK8的新特性Lambda、Optional、Streams、接口默认方法实现等。
    3. 学会Redis缓存的科学用法。
    4. 学会RabbitMQ各模块的通信方式。
    5. 学会Protobuf的最简单使用方式。很多人都是先写proto定义文件,再用Protobuf工具生成pojo,我们项目里只需要编写pojo加上注解就完成,框架会自动编译生成,开发效率提高几倍,开发如此简单。
    6. 学会websocket和前端的交互。
    7. 学会JT1078协议和FLV协议的socket编程。
    8. 学会部标监控平台难点之一 — 指令系统的开发。网上是没有这方面资料的,要么是实现的质量太差。我们将这个模块开源出来了供大家学习。
    9. 学会前后端分离,接口开发,接口文档生成,职责分明。
    10. 按照这种架构开发,其他web模块、JT808、JT809都能很快的开发出来。整个团队学习成本低上手很快,每个人负责各自的模块,不会出现每个人都能拿到公司的整套源码。整个系统支持跨平台部署(Windows、Linux、MacOS等)。
      image.png
      application.yml为全局公共配置,application-dev.yml为开发环境配置,application-prod.yml为生产环境配置,logback-spring.xml为日志配置文件。
      image.png
      启动流媒体服务器只需要执行:
    package com.gnss.media;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.socket.config.annotation.EnableWebSocket;
    
    @EnableWebSocket
    @SpringBootApplication
    public class MediaServerApplication {
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(MediaServerApplication.class, args);
        }
    }
    

    再结合gnss-web项目,打开flv客户端测试页面,效果:
    image.png

    未实现功能

    涉及音频相关的对讲、监听未实现,可以采用FFmpeg、EasyDarwin的音频解码,做成JNI给JAVA调用。具体流程如下:

    1. 终端上传RTP g711音频(或者其他音频格式如g726等)包,流媒体服务端解析RTP拿到g711音频流,调用JNI转成pcm再转成aac,封装flv格式发给http-flv或websocket-flv客户端。
    2. web客户端利用AudioContext采集音频pcm发送给流媒体服务器,流媒体服务端调用JNI将pcm转成终端支持的音频格式g711,封装JT1078 RTP包发送给终端。
    具体的代码太多了,篇幅有限不一一贴出了,请联系作者提供源代码。

    官方网站:http://www.gps-pro.cn
    开源地址:https://github.com/gnss-pro
    微信:17158638841 或扫描下图
    image.png

    展开全文
  • 所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理 这一套代码,最近比较闲就拿出来给开源做点贡献。 作为Java版的开源推送系统,MPUSH还是有很多不错的设计的,特别是...

    公司要用java做一个消息推送服务,打算底层用netty4实现,奈何资料较少。当调研了一段时间,绝望无助之际,mpush,横空出世,这个开源项目无疑给我们雪中送炭,不多说,下面是作者对它的介绍。


    引言

    由于之前自己团队需要一个消息推送系统来替换JPUSH,一直找了很久基本没有真正可用的开源系统

    所有就直接造了个轮子,造轮子的时候就奔着开源做打算的,只是后来创业项目失败一直没时间整理

    这一套代码,最近比较闲就拿出来给开源做点贡献。

    作为Java版的开源推送系统,MPUSH还是有很多不错的设计的,特别是对想自己搭建一套推送系统的团队

    是有很大的借鉴意义的。当然开源出来也是不想曾经做过的工作白白浪费掉,特别希望对这方面有兴趣的同学

    来一起把这套东西做的更好,服务更多的用户!

    项目主页

    https://mpusher.github.io

    系统介绍

    mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点。同时也是少有的可商用的开源推送系统。

    特性和优势

    1. 源码全部开放,包括server、android、ios (不像有些开源服务只开放部分代码,鄙视下)

    2. 代码质量高,全部模块化设计,真正的商用级产品,考虑到推送中遇到的大部分场景

    3. 安全性高,基于RSA精简的加密握手协议,简单,高效,安全

    4. 支持断线重连,及弱网下的快速重连,无网络下自动休眠节省电量和资源

    5. 协议简洁,接口流畅,支持数据压缩,更加节省流量

    6. 支持集群部署,支持负载均衡,基于成熟的zookeeper实现

    7. 用户路由使用redis集群,支持单写,双写,集群分组;性能好,可用性高

    8. 支持http代理,一根TCP链接接管应用大部分请求,让http请求更加及时

    9. 高度可配置化,基本上通过修改配置可满足大部分场景

    10. 扩展性强,高度模块化,基于SPI模式的可拔插设计,以满足特殊需求

    11. 监控完善,日志详细,可快速排查线上问题及服务调优

    教程与文档

    开发手册:https://mpusher.github.io/docs

    源码

    server https://github.com/mpusher/mpush

    java-client https://github.com/mpusher/mpush-client-java

    android sdk&demo https://github.com/mpusher/mpush-android

    iOS sdk https://github.com/mpusher/mpush-client-swift


    展开全文
  • java 项目打包部署

    千次阅读 2019-05-20 15:54:49
    java -jar sunxj-mail-0.0.1-SNAPSHOT.jar 四、SpringBoot--使用appassembler-maven-plugin打包 appassembler-maven-plugin是一个用来为Java应用打包并生成启动脚本的Maven插件,使用起来非常简单,只需要在项目的...
  • 课程目录 (001-004) 并发编程基础篇和中级篇 (005) 并发编程高级篇-锁的高级深化 (006) 并发编程高级篇-锁的高级深化 (007) 并发编程框架篇-Disruptor并发框架 (008) SocketIO网络编程基础篇 ...(012) Netty实现...
  • 项目背景 谈起在线聊天软件,大家会想到QQ微信等,这些通信软件极大的方便了所有人的交流,成为人们生活中不可缺少的交通工具。 知其然亦需要知其所以然,基于此我们也设计实现一套类QQ、微信的聊天系统。来探究一下...
  • 现在java项目部署在weblogic服务器上,现在想部署到 华为企业云-微服务云应用平台上, 想问下怎么部署? ![图片说明](https://img-ask.csdn.net/upload/201706/15/1497493754_557314.png)
  • java后端源码部署 fpush fpush是即时消息推送服务程序. 旨在做一个类似于极光推送,小米推送之类的Java程序开源实现。基于Netty + protobuf :backhand_index_pointing_right: fpush监控后台,点击进入演示 :backhand...
  • 集群设备管理云平台「Java、SPA、Spring、Netty、Vue.js 2.0、Element 2.0」项目描述Java & Vue.js 全栈项目,大规模集群设备管理云平台,由以下几部分组成:Java 后端服务器、基于 Vue.js 的 Web 前端「SPA」...
  • Netty Java快速指南

    2020-06-15 11:29:24
    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 Netty是一个无阻塞的输入/输出(NIO)框架,它使开发低级网络...
  • netty 项目打包发布至liunx

    千次阅读 热门讨论 2017-06-27 11:28:06
    之前我们提及了如何使用Maven来创建、管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,现在我们就开始将我们之前开发的项目demo发布到Linux环境下,并让它正常运行起来。 发布思路: 使用...
  • Netty and Java NIO APIs

    2015-10-13 20:06:05
    NettyJava NIO APIs本章包括 Netty架构 为什么需要非阻塞IO(NIO) 阻塞和非阻塞对比 JDK的NIO实现存在的问题,Netty的解决方式 本章介绍Netty,并且专注于Java NIO API的介绍。如果你是刚刚接触JVM中的网络编程,本...
  • java-netty介绍-NIO非阻塞编程

    千次阅读 2017-06-02 14:50:11
     Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。  2.使用 Netty 能够做什么? 开发异步、非阻塞的 TCP 网络应用程序; ...
  • 在eclipse使用maven deploy (tomcat:deploy) 热部署netty项目 ,项目启动的时候会报错端口被占用。 [code="java"] java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native ...
  • java网络编程之Netty实战数据通信(七)
  • Netty 实战

    千次阅读 2018-08-01 10:20:01
    本书是为想要或者正在使用 Java 从事高性能网络编程的人而写的,循序渐进地介绍了 Netty 各个方面的内容。 全书共分为 4 个部分:第一部分详细地介绍 Netty 的相关概念以及核心组件,第二部分介绍自定义协议经常...
  • Java中的NIO与Netty框架

    千次阅读 2017-12-16 12:08:14
     在微服务的大潮之中, 架构师通常会把系统拆分成了多个服务,根据需要部署在多个机器上,这些服务非常灵活,可以随着访问量弹性扩展。  世界上没有免费的午餐, 拆分成多个“微服务”以后虽然增加了弹性,但也...
  • Netty

    万次阅读 2018-03-02 14:55:08
    Netty概述:1、netty是基于Java NIO的网络应用框架,client-server框架2、Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞...
  • 基于Netty实现websocket集群部署实现方案 每天多学一点点~ 话不多说,这就开始吧… 文章目录基于Netty实现websocket集群部署实现方案1.前言2. 整体思路3. 代码demo4. 测试5.结语 1.前言 最近公司在做saas平台,其中...
  • Java代码自动部署

    2018-12-26 10:55:10
    【 ①Java代码自动部署-总结简介】 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节。对于Java开发者来说,Java代码的发布部署也是经常需要做的一件事,特别是互联网公司...
  • Netty 入门

    万次阅读 2021-08-11 13:53:28
    基本过程如下: 1 初始化创建2个NioEventLoopGroup,其中boosGroup用于Accetpt连接建立事件并...结合上面的介绍的Netty Reactor模型,介绍服务端Netty的工作架构图: 工作原理架构 初始化并启动Netty服务端过程如下:
  • netty

    2018-11-04 10:33:13
    版权声明:本文为博主原创文章,未经博主允许不得转载。 ... Netty概述:1、netty是基于Java NIO的网络应用框架,clie...
  • Netty-SocketIO:最好用的Java版即时消息推送

    万次阅读 多人点赞 2016-09-13 14:32:21
    Netty-SocketIO是一个开源的、基于Netty的、Java版的即时消息推送项目。通过Netty-SocketIO,我们可以轻松的实现服务端主动向客户端推送消息的场景,比如说股票价格变化、K线图、消息提醒等。它和websocket有相同的...
  • Netty 是一个高性能、异步事件驱动的NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制...
  • 最近实现了基于netty4的beanstalkd的客户端, 实现此客户端的目的是为了学习netty。 beanstalkd是一个高性能、轻量级的分布式内存队列系统,个人认为,如果需要一个轻量型的 中间件, beanstalkd是很不错的一个选择...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,411
精华内容 5,764
热门标签
关键字:

javanetty项目部署

java 订阅