`
idning
  • 浏览: 138782 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GWT & json方式时,用代理服务器 对付同源约束

阅读更多

最近GWT + GAE python

..至于为什么用了GAE python?当然用GAE java 代码管理更方便,但是有PyFetion,没有好的JavaFetion...

 

文档上说:因为同源约束,所以需要每次把gwt编译后拷贝到 服务器环境中,

于是,来了段代码:

 

GAE 跑在8080端口

GWT在8888端口

写一个代理服务器,监听7777端口,如果是GAE的请求转发到8080,否则转发到8888

 

 

import SocketServer
import socket

GAE_PORT = 8080
GWT_PORT = 8888

gwt_ext = ['html',
           'js',
           'png',
           'css',
]

def is_gwt(data):
    tmp = data [0: data.find('HTTP/1')]
    for ext in gwt_ext: 
        if (tmp.find(ext) > 0):
            return True
    return False


def ning_request(data):

    if is_gwt(data):
        print "ning: gwt\n\n"
        PORT = GWT_PORT
    else : 
        print "ning: gae\n\n"
        PORT = GAE_PORT

    HOST = "localhost"
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((HOST, PORT))
    sock.send(data)

    received = ''
    while True:
        line = sock.recv(1024)
        received += line
        if len(line) < 1024: # Zero length indicates EOF
            break
#    received = sock.recv(1024*1024)
    print "ning:", data
    print "ning:", received
    return received

class MyTCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
#        received = self.request.recv(1024*1024)

        received = ''
        while True:
            line = self.request.recv(1024)
            print "ning:line:", line
            received += line
            if len(line) < 1024: # Zero length indicates EOF
                break

#        print self.data
        self.wfile.write(ning_request(received))
#        self.rfile.close()
#        self.wfile.close()

if __name__ == "__main__":
    HOST, PORT = "localhost", 7777

    # Create the server, binding to localhost on port 9999
    server = SocketServer.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
#    server = SocketServer.ThreadingTCPServer(100, server)
    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    print "listening on :" , PORT
    server.serve_forever()

 

颇费了一点周折,因为开始想用nc直接搞,但是nc似乎不能根据内容转发。。不会。

 

 

分享到:
评论
1 楼 idning 2010-03-13  
不过这段代码在35行的recv经常阻塞,搞不定。!!!!

有时返回数据为空,有时只有1行!
有时被阻塞,难道是jetty server_file没有关闭流???

相关推荐

    JSON 的使用说明

    请注意,GWT中的这些JSON类会编译成JavaScript代码运行在浏览器环境中,因此它们在客户端和服务器之间传输数据时提供了高效且灵活的方式。通过这种方式,开发者可以充分利用JSON的易读性和轻量级特性,实现GWT应用...

    gwt 服务器端(内含配置教程)

    它允许开发者使用Java语言来编写客户端的Web应用,然后由GWT编译器将其转换为优化过的JavaScript代码,可以在任何现代浏览器上运行。GWT服务器端则涉及到与客户端进行交互的部分,包括数据交换、服务调用等。 ...

    json教程(java与json的使用)

    ### JSON 教程 (Java 与 JSON 的使用) #### JSON 的基本概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一种文本形式的数据表示方式,旨在简化数据传输并提高效率。JSON 与 XML 类似...

    json初学入门教程

    - 使用`com.google.gwt.json.client`包中的类来构建JSON对象或数组。 - 示例代码: ```java JSONObject input = new JSONObject(); JSONString value = new JSONString("mazhao"); input.put("name", value); ...

    JSON教程.pdf

    虽然GWT(Google Web Toolkit)默认支持的是RPC(Remote Procedure Call)作为客户端与服务器间数据交换的标准格式,但在实际开发中,有时我们需要使用JSON格式。为此,我们需要采取几个步骤来使GWT支持JSON数据交换...

    GWT中的xmlHttpRequest

    在GWT(Google Web Toolkit)开发中,XMLHttpRequest(XHR)是实现客户端与服务器间异步数据交换的关键技术。GWT提供了对XHR的封装,使得开发者可以方便地使用JavaScript的XMLHttpRequest对象,而无需直接接触底层的...

    JSON深入浅出用法

    尽管**JSON**不是GWT(Google Web Toolkit)中默认支持的数据交换格式,但可以通过一些步骤来实现JSON在GWT中的使用。 1. **引用HTTP和JSON支持** 在`.gwt.xml`文件中添加如下依赖: ```xml ...

    JSON教程 pdf

    - JSON的数据格式更简洁,因此在网络传输时更高效。 - **解析速度**: - JSON的解析速度通常比XML更快。 - **适用场景**: - XML更适用于需要元数据和复杂数据结构的情况。 - JSON则更适合于简单的数据交换场景...

    GWT Demo,GWT学习时的一些小例子

    例如,一个示例可能展示了如何创建一个按钮控件,当用户点击按钮时,通过GWT的RPC机制向服务器发送请求,获取数据并更新页面上的显示。另一个示例可能涉及使用GWT的Composite类来组合多个Widget,创建自定义的复杂...

    GWT通信机制初探

    总结起来,GWT通信机制是GWT应用开发的关键,理解并掌握RPC、RequestBuilder、XMLHttpRequest等通信方式,以及JSON和History/Place的概念,对于开发高效、用户体验良好的Web应用至关重要。同时,正确安装和配置GWT...

    gwt 练习 gwt学习

    6. **RPC通信**:GWT的Remote Procedure Call (RPC)机制使得客户端和服务器之间能进行数据交换。在StockWatcher中,可能需要一个服务接口来获取实时股票数据。 7. **异步编程**:由于RPC调用是异步的,开发者需要...

    GWT入门 GWT中文教程

    “GWT入门”和“GWT中文教程”显然是针对初学者的,它们可能从最基础的GWT安装、项目配置开始,逐步讲解GWT的核心概念,如UI设计(Widget系统)、事件处理、数据模型和服务器通信(RPC机制)、本地存储、国际化等。...

    Gwt连接数据库的案例

    5. **JSON或XML数据交换格式**:GWT RPC默认使用二进制编码,但也可以选择使用JSON或XML作为数据交换格式,尤其是当需要跨域通信时。 6. **测试与调试**:完成代码编写后,使用GWT的开发模式进行测试,这可以在本地...

    GWT安装和使用

    ### GWT安装与使用详解 #### 一、GWT特性简介 **1. 动态、可重用的UI组件** GWT 提供了一系列丰富的 UI 组件库,这些组件不仅功能强大而且高度可定制,使得开发者能够轻松地构建美观且交互性强的用户界面。每个 UI...

    GWT-API.rar

    这个“GWT API.rar”压缩包包含了史上最全的GWT API文档,对于开发者来说是极其宝贵的资源,特别是在使用Java进行Web UI开发时。 GWT的核心理念是将Java代码编译为JavaScript,使得开发者可以利用熟悉的Java语言来...

    GWT (GOOGLE WEB TOOLKIT)介绍PPT

    **GWT (Google Web Toolkit)** 是一款由Google开发的开源工具包,专为Java开发者设计,使得他们能够使用Java语言创建高效、动态且交互性强的Ajax应用。GWT通过将Java代码编译成浏览器可执行的JavaScript和HTML,解决...

    JSON教程(格式,解析方法等)

    服务器端为了处理JSON数据,通常需要使用JSON解析库,例如***提供的JSON解析器,或者其他的JSON Java库,以便将JSON格式的数据转换为服务器端可以处理的各类数据结构。 在实际的应用中,JSON格式的数据在传输时被...

    GWT

    GWT通过将Java代码编译为JavaScript,使得开发者可以使用Java语言进行客户端的Web开发,从而避免了直接编写JavaScript的复杂性。 GWT的核心特点包括: 1. **Java编程**:GWT允许开发者使用Java语言进行前端开发,...

    GWT开发环境JAVA

    3. **APIs**:GWT提供了大量JavaScript库,包括UI组件、事件处理、国际化、数据绑定、异步RPC通信等,这些APIs都是用Java封装的,方便开发者使用。 4. **Widget库**:GWT包含一个丰富的Widget库,涵盖了从按钮、...

Global site tag (gtag.js) - Google Analytics