顯示具有 Tornado 標籤的文章。 顯示所有文章
顯示具有 Tornado 標籤的文章。 顯示所有文章

2025年5月11日 星期日

Tornado 之 json 格式

延續昨天的範例,在 Server 端加點小東西 Client 端就可讀到訊息,Server 程式碼摘錄如下 (需 import json 套件)







Client 端程式碼和結果摘錄如下






由於 Tornado 是應用在遊戲名稱查詢所以回傳資料不會太多,無須用到 json 檔案格式,故明日即可開始 Client 端資料庫撰寫 (TEXT 一更新立刻觸發 『write_message)

2025年5月10日 星期六

Tornado WebSocket 連線

Tornado 有所謂『websocket』交握,其意為連線一次後就可維持通訊,因為我的資料庫想每更動 TEXT 就查詢一次,感覺用 websocket 較適合,否則使用 AsnycHTTPClient 每次訪問都要重新連線一次,Client 端和 Server 端程式如下 (下個範例是 Server 回傳 JSON 格式)


============================================================================
Client
============================================================================
from tornado.ioloop import IOLoop, PeriodicCallback
from tornado import gen
from tornado.websocket import websocket_connect


class Client(object):
    def __init__(self, url, timeout):
        self.url = url
        self.timeout = timeout
        self.ioloop = IOLoop.instance()
        self.ws = None
        self.connect()
        PeriodicCallback(self.keep_alive, 20000).start()
        self.ioloop.start()
    @gen.coroutine
 
    def connect(self):
        print ("trying to connect")
        try:
            self.ws = yield websocket_connect(self.url)
        except Exception:
            print ("connection error")
        else:
            print ("connected")
            self.run()
 
    @gen.coroutine
    def run(self):
        while True:
            msg = yield self.ws.read_message()
            if msg is None:
                print ("connection closed")
                self.ws = None
                break

    def keep_alive(self):
        if self.ws is None:
            self.connect()
        else:
            self.ws.write_message("keep alive")

if __name__ == "__main__":
    client = Client("ws://10.0.0.240:3306", 5)


============================================================================
Server
============================================================================

import logging
import tornado.web
import tornado.websocket
import tornado.ioloop
import tornado.options

from tornado.options import define, options

define("port", default=3306, help="run on the given port", type=int)


class Application(tornado.web.Application):
    def __init__(self):
        handlers = [(r"/", MainHandler)]
        settings = dict(debug=True)
        tornado.web.Application.__init__(self, handlers, **settings)


class MainHandler(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True

    def open(self):
        logging.info("A client connected.")

    def on_close(self):
        logging.info("A client disconnected")

    def on_message(self, message):
        logging.info("message: {}".format(message))


def main():
    tornado.options.parse_command_line()
    app = Application()
    app.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    main()

2025年5月9日 星期五

Tornado Server 端建立多個路由 (Client 端用 Requests)

 下面是 Server 端的 Code,共有三個路由




Server 端使用『localhost:3306/image/jpg/h1.jpg』可顯示如下的圖





Tornado 啟動的方式是在 Server 端使用 localhost,但我要的是 Client 端連線,所以使用『requests』在 Client 發送連線請求,預計 Tornado Server 端可用 JSON 方式回傳文字,但圖片要如何回傳呢?(『http』和『https』的差別是不使用憑證『verify』也是一樣的意思)




Tornado 用 fetch 連線網頁

Tornado 協程 (Coroutines) 的可信度存疑,所以我改用向下相容的 tornado.gen moduleGithub 上的原始程式如下




玄之又玄的協程 (Coroutines) Github 程式碼如下,我弄不出來並且『Future』啟人疑竇




融合 gen 監聽 3306 的程式碼如下




印出來的網頁如下,有點破爛但才剛剛開始










2025年5月7日 星期三

三探 Tornado

找到了一個好網址有教 Tornadohttps://www.cnblogs.com/lizexiong/p/17441475.html』,以下是最基本的範例




?id=7777QueryString





2025年5月3日 星期六

初探 Tornado

因為 http.server 功能太過陽春所以改用開源專案 tornado,It 邦幫忙有教學免去看原文文件的痛苦 (而且看不懂)Server 端程式碼如下


用   Server   直接打   localhost   網址可印出   Hello   World