月归档:2016 年四月

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使用 | 留下评论

【BAE专业版】如何让你的PHP服务支持分布式session

简介 PHP session支持在服务端缓存用户信息以便随后使用。当在BAE部署环境的实例数大于1时,我们无法通过内存实现分布式session,这是因为环境的多个实例并不共享内存。本文主要基于PHP讨论在BAE专业版上实现分布式session的一种方案。 创建简单缓存服务 百度开放云提供简单缓存服务SCS,支持memcache和redis,因此我们可以利用SCS实现分布式session。BAE专业版的环境实例可以通过内网访问SCS。这里我们以memcache为例,当然也可以使用redis。 注意,需要SCS和BAE部署在百度开放云的同一个区域。我们在“华北-北京“区域创建一个memcache。创建成功后,可以在创建的scs集群详情页获取访问地址和端口号,如下图所示。 通过简单缓存服务实现分布式session 创建一个PHP5.4的应用,并部署一个环境,在”环境详情->设置->关联SCS”中,将该环境和创建的memcache建立关联,BAE会在后台将该环境下所有实例的ip加到该memcache的白名单中。关联的具体操作方法可以参考BAE官方文档环境管理中关联RDS或SCS一节。 我们可以通过修改php.ini配置memcache保存session。php.ini的修改方法请参考BAE官方文档php高级配置中的自定义php.ini。在应用根目录下增加一个php.ini文件,将mamcache的配置写入到该文件。 session.save_handler = memcache session.save_path = “tcp://memcache.utmppnqy.scs.bj.baidubce.com:11211″ 验证配置结果 我们通过修改index.php文件测试,验证分布式session是否生效,代码示例如下: <?php session_start(); // 缓存session开始的时间 if (!isset($_SESSION['test'])) { $_SESSION['test'] = time(); } print session_id(); print “<br><br>”; print $_SESSION['test']; print “<br><br>”; print time(); ?> 部署代码成功后,通过浏览器刷新访问页面,我们发现打印的session开始时间在同一个session … 继续阅读

发表在 未分类 | 留下评论

【BAE基础版】玩转WordPress模板

伴随着“应用模板”功能的推出,BAE基础版实现了一次华丽的转身。 我们先看一下模板应用和普通应用(空应用)的区别: (● 支持 – 不支持 ○ 即将支持) 分类 功能 空应用 模板应用 代码管理 打包上传 – ● svn ● – git ● – 扩展性 执行单元个数 1-100可调 1固定 内存 64MB-2GB可调 64MB-2GB可调 带宽 5Mb/s可扩展 5Mb/s固定 语言环境 php 5.4 ● 由模板决定 php 5.5(含Zend Guard Loader) ● … 继续阅读

发表在 未分类 | 留下评论

【BAE基础版】在Python Web中增加定时任务运行Python脚本

简介 在BAE Python Web部署中,通过crond定时执行Python脚本时,可能触发定时任务异常。本文主要介绍异常产生原因及解决方案。关于crond使用方法,请参考以下链接: https://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E9.85.8D.E7.BD.AEapp.conf 异常现象 以Python Web中的mongo操作为例,配置app.conf,定时执行mongo db操作脚本。(脚本来源:Pyhon连接MongoDB) #-*- coding:utf-8 -*- import pymongo from pymongo import MongoClient def test_mongo(): ### 连接MongoDB服务 ### 从管理控制台获取host, port, db_name, api_key, secret_key con = MongoClient(“mongo.duapp.com”, 8908) db_name = “CAoKTghXtKNEGBaLAYRj” # 数据库名称 db = con[db_name] … 继续阅读

发表在 未分类 | 留下评论

实力科普,让网站和App搬家不再痛苦(BAE篇)

给网站、App搬家是个细致的体力活,容易遇到各种意外,轻则停服、影响收入,重则数据丢失,造成不可挽回的损失。因此需要制定一个周密细致的计划,所谓谋定而后动,三思而后行。  首先要选择一个靠谱的平台。目前提供网站、app托管服务的平台很多,有免费的也有收费的,有境内的也有境外的,有大平台也有小平台。建议站长、开发者朋友从以下几个方面来选择: 稳定性:建议选择比较大的、比较重视这块业务的平台,服务相对有保障,避免停服带来的尴尬。境外的平台虽然不用备案,但是访问速度肯定没法和国内平台比。另外说墙就墙了,因此除非不得已,还是建议选择国内的平台。 性价比:价格是一个关键因素,但也不是越便宜越好。免费的服务不推荐,说停就停了,没有保障,而且往往会在数据迁移方面设置各种障碍。另外还要考虑收费是否灵活,如果不灵活就失去云服务的优势了。 可扩展性:CPU、内存、容量和带宽都要能够很方便的扩展。毕竟等网站、App的流量、数据量上来后,谁都不想再搬家,这个站长、开发者朋友都懂的。 安全性:平台要能够提供最起码的入侵和攻击防护,这一点大平台肯定比小平台更有优势。在互联网上裸奔是个近乎自杀的行为,分分钟让你中招。 接下来以百度开放云应用引擎BAE为例,介绍如何进行网站、App的迁移。 百度应用引擎(Baidu App Engine,简称BAE)是国内商业运营时间最久、用户群体最为庞大的PaaS平台之一,提供弹性、一站式的应用部署服务,支持php/java/node.js/python等各种语言。用户只需上传代码,BAE自动完成运行环境配置、应用部署、均衡负载、资源监控、日志收集等各项任务,大大简化运维部署工作。 同时基于百度开放云海量的资源,基于docker技术和分布式架构,BAE提供灵活、弹性、分钟级的资源扩展能力,升级扩容无需重新部署代码,轻松应对各种高并发访问场景(如“双十一”、“秒杀”、“春运订票”等)。 一般的站长和开发者朋友对BAE应该并不陌生,这里就不详细展开了,不清楚的朋友可以访问其官网、在线帮助、论坛脑补一下: https://bce.baidu.com/product/bae.html https://bce.baidu.com/doc/BAE/QuickGuide.html https://bce.baidu.com/doc/BAE-Pro/QuickGuide.html http://developer.baidu.com/forum/topic/list?boardId=66 (值得一提的是BAE刚刚支持了自定义docker镜像,这对于当下如火如荼的docker开发者而言是一个福音。) 第一步:评估可行性 迁移网站之前,首先要评估您的网站、App能否在BAE上正常运行。主要从两个方面来判断: 一是运行环境是否满足要求,BAE提供了支持以下语言的运行化境: 语言环境 BAE基础版 BAE专业版 php 5.4 √ √ php 5.5(含Zend Guard Loader) √ √ php 5.6(含Zend Guard Loader) – √ java … 继续阅读

发表在 未分类 | 留下评论