从 GWT 客户端页面轮询运行中的 Python 脚本

74 阅读2分钟

这位提问者正在尝试创建一个股票交易游戏的网络前端,该游戏使用 Python 实现,会生成股票价格和随机的文本片段。他计划使用 GWT 作为前端,并希望能够与 Python 共享价格生成器通信,而不是尝试在 Java 中重新编写代码。

huake_00152_.jpg 他考虑使用 SQLite 数据库,并使用 JDBC 来获取价格,但想知道是否有更好的方法可以在客户端页面或服务器端 Java 代码中轮询某个正在运行的 Python 脚本。他还提到了一个 Python 包装器,但他不确定如何使用它。

2、解决方案

确实存在更好的方法,可以使用名为 Twisted 的 Python 库,实现从 GWT 客户端页面轮询运行中的 Python 脚本。Twisted 是一个事件驱动的网络引擎,可以轻松地创建和管理网络连接,非常适合此类任务。

以下是使用 Twisted 和 GWT 实现此功能的步骤:

  1. 在 Python 脚本中,使用 Twisted 创建一个服务器。该服务器将监听客户端的连接请求,并在连接建立后发送数据。
  2. 在 GWT 客户端页面中,使用 JavaScript 库或框架(如 jQuery)来创建轮询请求。该请求将定期向 Python 服务器发送请求,并处理收到的数据。
  3. 在服务器端,当收到轮询请求后,服务器将使用 Twisted 发送数据给客户端。数据可以是股票价格、文本片段或其他任何需要在客户端显示的信息。

以下是一个代码示例,演示了如何使用 Twisted 和 GWT 来实现此功能:

# Python 脚本

from twisted.internet import reactor, protocol

class SharePriceServer(protocol.Protocol):
    def dataReceived(self, data):
        # 当收到客户端的请求时,发送数据
        self.transport.write("Current share price: 100.00")

class SharePriceFactory(protocol.ServerFactory):
    def buildProtocol(self, addr):
        return SharePriceServer()

if __name__ == '__main__':
    # 创建服务器并开始监听
    reactor.listenTCP(8080, SharePriceFactory())
    # 运行事件循环
    reactor.run()
// GWT 客户端页面

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;

public class SharePriceClient {
    private static final String SERVER_URL = "http://localhost:8080";

    public static void main(String[] args) {
        // 每5秒向服务器发送轮询请求
        Timer timer = new Timer() {
            @Override
            public void run() {
                // 使用 XMLHttpRequest 发送 GET 请求
                XMLHttpRequest xhr = new XMLHttpRequest();
                xhr.open("GET", SERVER_URL);
                xhr.onload = new EventHandler() {
                    @Override
                    public void handleEvent(Event evt) {
                        // 处理收到的数据
                        String data = xhr.getResponseText();
                        Window.alert(data);
                    }
                };
                xhr.send();
            }
        };
        timer.scheduleRepeating(5000);
    }
}

通过使用 Twisted 和 GWT,能够轻松实现从 GWT 客户端页面轮询运行中的 Python 脚本。Twisted 提供了强大的网络编程功能,而 GWT 则提供了构建跨平台网络应用的强大工具。