跨平台移动开发实战(七)------服务器端快速搭建

转自:http://blog.csdn.net/cutesource/article/details/7770055

客户端与服务端基于HTTP和WebSocket网络协议来通讯,其中HTTP用于从客户端向服务端的请求,WebSocket用于从服务端向客户端的推送,因此服务器端需要支持HTTP和WebSocket两种协议。HTTP好说,所有Web服务器都支持,而支持WebSocket的倒不多。

.Net和Nodejs俺不熟,就不作评论,Tomcat 7在最新版本里加入对Websocket支持,但我需要更为轻量级的方案,最好是内嵌,因此Netty就成了我首选。Netty源码里有websocket的Samples,我就是直接在samples上进行修改,总结下来需要如下几步:

  1. 打开网络端口
    [java]  view plain copy
    1. (new Thread(new Runnable(){  
    2.     @Override  
    3.     public void run() {  
    4.         ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(  
    5.                 Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));  
    6.         // Set up the event pipeline factory.  
    7.         bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory());  
    8.         int port = 8080;  
    9.         // Bind and start to accept incoming connections.  
    10.         bootstrap.bind(new InetSocketAddress(port));  
    11.         System.out.println("Web socket server started at port " + port + '.');  
    12.     }  
    13. })).start();  
  2. 创建处理数据流的pipeline,特别是加入Websocket的handler
    [java]  view plain copy
    1. public class WebSocketServerPipelineFactory implements ChannelPipelineFactory {  
    2.     public ChannelPipeline getPipeline() throws Exception {  
    3.         // Create a default pipeline implementation.  
    4.         ChannelPipeline pipeline = pipeline();  
    5.         pipeline.addLast("decoder"new HttpRequestDecoder());  
    6.         pipeline.addLast("aggregator"new HttpChunkAggregator(65536));  
    7.         pipeline.addLast("encoder"new HttpResponseEncoder());  
    8.         pipeline.addLast("handler"new WebSocketServerHandler());  
    9.         return pipeline;  
    10.     }  
    11. }  
  3. 实现在WebSocketServerHandler里实现messageReceived,接收网络数据。这里数据分为HTTP和WebSocket两种,如何是HTTP,那说明是处理最开始的Handshake阶段,这是需要为WebSocket建立握手
    [java]  view plain copy
    1. // Handshake  
    2. WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(  
    3.         this.getWebSocketLocation(req), nullfalse);  
    4. this.handshaker = wsFactory.newHandshaker(req);  
    5. if (this.handshaker == null) {  
    6.     wsFactory.sendUnsupportedWebSocketVersionResponse(ctx.getChannel());  
    7. else {  
    8.     this.handshaker.handshake(ctx.getChannel(), req).addListener(WebSocketServerHandshaker.HANDSHAKE_LISTENER);  
    9. }  
    如果是WebSocketFrame,则接收客户端发来的message
    [java]  view plain copy
    1. String request = ((TextWebSocketFrame) frame).getText();  
  4. 向客户端推送数据,这里只要是channel没关,并且能拿到channel对象即可
    [java]  view plain copy
    1. ctx.getChannel().write(new TextWebSocketFrame("some message"));  
  5. 实现channelOpen、channelClosed等方法,实现对网络连接整个生命周期的监控

值得注意的是目前WebSocket的实现对二进制流支持不够好,因此当需要服务端向客户端推送类似与文件类IO流时,我采取的折中方案,就是先让websocket向客户端发通知,然后再让客户端向服务端请求文件下载,当然这样的代价就是两次连接,如果有更好的方案请推荐给我。

对于HTTP,Netty从原理上说是支持的,不过支持得不够好,最新的不稳定版本才有HTTP Request的解析支持,我也没太多时间来写这块,于是乎又找了另外一个可以内嵌的Web服务器Jetty来支持HTTP和servlet,当然我用了比较老版本的Jetty 6,这个版本比较轻量,内嵌比较简单,几行代码就可以打开网络端口并支持servlet:

[java]  view plain copy
  1. (new Thread(new Runnable(){  
  2.     @Override  
  3.     public void run() {  
  4.         int port = 8081;  
  5.         Server server = new Server(port);  
  6.         Context root = new Context(server,"/",Context.SESSIONS);  
  7.         root.addServlet(new ServletHolder(new LoginSTServlet()), "/login");  
  8.         try{  
  9.             server.start();  
  10.             System.out.println("Http server started at port " + port + '.');  
  11.         }catch(Exception err){  
  12.             err.printStackTrace();  
  13.         }  
  14.     }  
  15. })).start();  
这样,几个类就搭起了服务端,当然这只是快速开始,服务端的建设远不止这些,比如security和数据压缩等,这些我单独拿出来详细分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 硬件需求 1.1 基本配置 配件 数量 CPU 2核 内存 4G 硬盘 100G 1.2 最低配置 配件 数量 CPU 2核 内存 2G 硬盘 10G 2 软件需求 名称 分类 版本 Windows 操作系统 2003及以上 jdk Java虚拟机 1.5.x及以上 Tomcat Web服务器 5.x及以上 Easy do it (轻松互联网开发平台,简称轻开平台,原名WebEasy) 应用开发服务器 2014及以上 Access 数据库 97及以上 EditPlus 开发工具 2.x及以上 3 软件安装 4 发布 4.1 下载 Easy do it,轻松互联网开发平台(简称轻开平台,原名WebEasy)下载地址: CSDN下载频道:http://download.csdn.net/detail/tx18/8711175 百度云盘:http://pan.baidu.com/s/1eQElpom 官网:http://edoit.htok.net/ 最新更新的下载包:http://download.csdn.net/user/tx18 4.2 发布 复制webeasy目录到D:\下,然后进入%TOMCAT_HOME%\conf目录,用文本编辑器(如:EditPlus)打开server.xml文件,在“Host”标签下添加一“Context”标签: 保存退出并启动tomcat 5 编辑工具 轻开平台可以用任何网页或文本编辑器进行开发,我本人一直在使用EditPlus,以下推荐常用的编辑软件: • EditPlus EditPlus 是一款功能强大的文字处理软件。它可以充分的替换记事本,它也提供网页作家及程序设计师许多强悍的功能。支持 HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript、VBScript 等多种语法的着色显示。程序内嵌网页浏览器,其它功能还包含 FTP 功能、HTML 编辑、URL 突显、自动完成、剪贴文本、行列选择、强大的搜索与替换、多重撤销/重做、拼写检查、自定义快捷键,等等... EditPlus中文版包含在下载包中 6 开发 6.1 第一个json 新建一个扩展名json的文件,如one.json(下图) 然后录入如下内容 {"item":{ 土豆 1.24 KG T恤 68 件 可乐 2.20 瓶 书 51.24 本 @{item:name} @{item:price} @{item:unit} },"sort":@{int:@{item:getSuffix}+1} } 6.2 针对移动App(json格式)的规则及开发例子 除了基本开发标签语言及表达式(参见同一下载包中的开发手册)外,轻开平台特别针对移动App最常用的json文本格式开发的对应规则:  文件扩展名须为json(如:one.json)或用JspEasy扩展  文件内容须为闭合的json格式,静态内容则可直接书写json格式,如: {“item”: { … … },”other”:”other value” }  value属性参数表示输出不带引号的值,如: @{item:price} 输出:"pri

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值