作者归档:jianhengyi

tomcat+netty实现TCP连接服务

netty是一个异步的、事件驱动的网络应用程序框架,通过netty可以简化TCP和UDP的socket服务开发(注:目前BAE不支持UDP协议)。 BAE提供的是标准的servlet container环境(tomcat和jetty,本文主要以tomcat为例子),那如何在这样的环境下初始化netty并实现TCP连接的服务呢? 在servlet container环境中,可以通过实现ServletContextListener接口来监听应用启动和停止的事件,我们只需要在启动事件的处理方法中初始化netty即可。 让我们来看一个具体的例子,该例子改编自netty官方的Echo Server例子。 首先,我们需要实现一个ServletContextListener,在contextInitialized方法中初始化netty,让netty监听9000端口: package test; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class StartNettyServer implements ServletContextListener { @Override public … 继续阅读

发表在 BAE使用 | 留下评论

gradle+svn轻松搞定java代码上传

背景 在BAE基础版和专业版上,java应用通过war包文件部署的时候,总会遇到一些小麻烦: BAE专业版的svn/git有单文件40M的限制,所以在专业版的svn/git中上传超过40M的war包(很多war包都会超过40M)是不可行的 BAE基础版的svn/git,以及BAE专业版的打包上传,虽然没有单文件大小限制(BAE基础版的svn/git有所有文件加起来不能超过100M的限制),但是每次有任何改动,都需要上传整个war包,导致每次上传耗时很长 解决的办法很简单:将war包中的文件,解压到BAE专业版或基础版的svn/git中的ROOT目录下(tomcat为ROOT目录,jetty为root目录),再上传。 这样,既能避免了BAE专业版svn/git单文件40M的限制(war包中解压出来的文件一般不超过40M),也能避免每次都要上传整个war包的问题(只需要上传war包中有变化的文件,像依赖的jar包文件一般都是不会发生变化的)。 本文主要介绍,如何通过构建工具gradle,实现打war包、解压war包、上传svn的自动化流程。 注:本文并不包含gradle的使用教程,如果你并不熟悉gradle,建议阅读以下gradle入门系列文章: Gradle入门系列(1):简介 Gradle入门系列(2):第一个Java项目 Gradle入门系列(3):依赖管理 Gradle入门系列(4):创建二进制发布版本 Gradle入门系列(5):创建多项目构建 Gradle入门(6):创建Web应用项目 方案 要实现打war包、解压war包、上传svn的自动化流程,只需要在gradle的构建脚本build.gradle中增加一段脚本,并执行gradle publish命令即可。 首先,在build.gradle中增加以下内容: // 使用war插件打war包 apply plugin: ‘war’ // svnUrl为BAE基础版或专业版的svn地址,可在控制台复制获得 def svnUrl = ‘https://svn.bce.baidu.com/…/’ task updateSvn << { if (file(‘svn’).exists()) { exec { workingDir ‘svn’ … 继续阅读

发表在 BAE使用 | 留下评论

利用扩展服务实现基于websocket的聊天室

简介 BAE提供了丰富的扩展服务,利用这些扩展服务,可以开发出各种各样的应用。今天我们来介绍一下,如何利用扩展服务开发一个聊天室。 该聊天室是一个HTML5的网页,效果图如下图所示。用户打开聊天室的页面后,可以输入姓名和消息,点击发送之后,消息就会通过服务器,转发到所有已经连接到服务器的浏览器,这样消息就能在整个“聊天室”中显示出来。同样的,别的用户发送的消息,当前用户也能即时的显示出来。

发表在 未分类 | 留下评论