归档 2014年2月5日

基于Channel的Django日志查看工具

DjangoLogboard4Sae

DjangoLogboard4SAE是一个运行在SAE(Sina Application Engine)的实时日志查看工具

该工具使用了Channe服务,可将Django应用的请求与异常日志实时地展现给开发者,便于线上调试

Github:https://github.com/qinjiannet/logboard

演示地址:http://logboard.sinaapp.com

使用方法:

1. 在settings.py文件中MIDDLEWARE_CLASSES列表添加logboard.middleware.DebugMiddleware中间件

2. 启用SAE的task_queue模块,创建一个等级为2的顺序队列,命名为msg_queue

3. 初始化kvdb

4. 修改urls.py,添加路由:

  1. url(r'^logboard/', include('logboard.urls')),
  2. url(r'^_sae/channel/', include('logboard.urls')),

注:*通过访问http://logboard.sinaapp.com/logboard/test/可以触发一个异常

基于MySQLdb的SAE_PYTHON环境MYSQL小工具


Python代码 


  1. #coding=utf-8

  2. import sae.const

  3. import MySQLdb

  4.  

  5. #获取数据库连接

  6. def get_conn():

  7.   conn=MySQLdb.connect(host=sae.const.MYSQL_HOST,user=sae.const.MYSQL_USER,passwd=sae.const.MYSQL_PASS,db=sae.const.MYSQL_DB,port=int(sae.const.MYSQL_PORT),charset='utf8')

  8.   return conn

  9.  

  10. #执行SQL查询,结果以list(dict...)的形式返回

  11. def query_for_list(query,*param):

  12.   try:

  13.     conn=get_conn()

  14.     try:

  15.       cur=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

  16.       cur.execute(query, param)

  17.       result = cur.fetchall()

  18.       return result

  19.     finally:

  20.       cur.close()

  21.       conn.close()

  22.    ...

继续阅读

SAE_Channel服务尝鲜(Python版)

今天小试了一下SAE近期推出的Channel服务的Python版本,简单谈下自己的感受。
SAE_Channel服务拟满足的需求是“实时消息推送”,亮点是“推送”二字(push),应用了Html5的WebSocket协议。与之相对,Web应用中的消息传递功能也可采用ajax定时查询的方式实现。JS客户端(周期性地)主动向应用服务端发送新消息查询请求,亦即从服务端“拉取”(pull)信息,这种方式最大的不足之处就是无法保证新消息的实时性。

与传统的C/S模式消息传递方式相比,SAE_Channel服务新增了一个角色“Channel服务器”(URL:channel.sinaapp.com),充当了Client和Server之间的“中间人”(Mediator)。

JS客户端通过应用服务端获取到channel的URL(形如ws://channel.sinaapp.com/{{token}}),此后即可与channel服务端采用WebSocket协议进行信息的上传和接收。
下面的Demo代码实现了JS服务端实时地从channel服务器获取消息并弹出提示框的简单功能。

JavaScript代码 
  1. <script src="http://channel.sinaapp.com/api.js"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function(){
  4.     var channel = sae.Channel('{{url}}'); //{{url}}为事先通过应用服务端向Channel服务器获取的Channel_url
  5.     channel.onmessage = function (message) {
  6.       alert(message.data); //接收到Channel服务器推送的消息时的回调函数
  7.     }
  8. });
  9. </script>

通过使用send(msg)方法,JS客户端可以向Channel服务器上行发送消息。

JavaScript代码 
  1. channel.send(msg);

通过chrome的调试工具可以看到JS客户端向channel服务端发送了两次请求
1. http://channel.sinaapp.com/{{token}}/info,状态码为200 OK
2. ws://channel.sinaapp.com/{{token}}/{{num}}/{{code}}/websocket,状态码为101 Switching Protocols
  ...

继续阅读

明天

归档