2

私は PHP での作業に非常に慣れています。新しい .php ファイルの作成、すべての入力、HTML との混合、さまざまな .php/.html ファイルのインクルード/要求などです。

私は Tornado の使い方を学び始めたばかりで、Tornado が構築されている基本的な原則と構成要素に頭を悩ませています。

Tornado がどのように機能するかを正確に理解するために (もちろん、ドキュメントを読むことは別として)、私は PHP で基本的なものを取り、それを Tornado で再作成しようとしています。

たとえば、PHP には自分のindex.phpページがあります。そのページには、email入力とpassword入力があります。ユーザーがフォームを送信すると、actionが に設定され、ユーザーを認証する「ログイン機能」が呼び出される場所にlogin.php送信されます。login.phpすべてが正常であれば、$_SESSION変数が設定され、ログインされます。エラーがある場合は、エラー メッセージがlogin.php

Tornado に関して、これに相当する「疑似コード」は何でしょうか?

いくつかの基本的で非常に不完全な python:

import os

import tornado.web
import tornado.ioloop

root = os.path.dirname(__file__)
port = 8888

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

class LoginHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("login.html", title="Login to your account!")

    def post(self):
        useremail = self.get_argument("useremail", None)
        password = self.get_argument("password", None)
        self.render("login.html", title="Login to your account!")

def main():
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/login", LoginHandler),
        (r"/css/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(root, 'css')}),
        (r"/pictures/(.*)", tornado.web.StaticFileHandler, {"path": os.path.join(root, 'pictures')}),
    ])
    application.listen(port)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

ここでの私の変換に関するヘルプは大歓迎です。これは、私が慣れ親しんでいるものとはまったく異なる方法であり、このような単純なプロセスの疑似コードは間違いなく役に立ちます。とにかく、みんなありがとう。

4

1 に答える 1

-1

イベント駆動型のノンブロッキング I/O であるreactを PHP で使用できます。

ポート 1337 でリッスンする単純な HTTP サーバーの例を次に示します。

<?php

  $i = 0;

  $app = function ($request, $response) use (&$i) {
      $i++;

      $text = "This is request number $i.\n";
      $headers = array('Content-Type' => 'text/plain');

      $response->writeHead(200, $headers);
      $response->end($text);
 };

 $loop = React\EventLoop\Factory::create();
 $socket = new React\Socket\Server($loop);
 $http = new React\Http\Server($socket);

 $http->on('request', $app);

 $socket->listen(1337);
 $loop->run();
于 2015-01-22T06:04:06.853 に答える