2011-12-27 5 views
2

XMLレスポンスを受信するために私のサーバーに非同期HTTPコールを行う必要があります。 私は応答を得た後、成功した場合は[以前に指定された]関数を呼び出し、エラーの場合は他の関数を呼び出します。ルアでコールバックを使用して非同期HTTPコールを作成する方法は?

私は最初にコルーチンを考えました。残念なことに、http.get呼び出しを行った後は、すべてが完了するのを待つので、私はyieldできません。私は応答を読み取るために別々の関数を使うことができると知っていますが、この関数をトリガするために少なくともデータの最初のバイトを待たなければなりません。とにかく、私がコルーチンを使ってやることは、行く方法のようには見えません。

次に、XMLを取得するための別のスレッドを作成してからLuaで関数を呼び出してみましたが、新しいスレッドが作成された後にlua_stateが変更されるため、これは機能しません。スレッドが作成される前に、私はスタック上に3つのパラメータを見ることができます。そして、新しいスレッドの作成後に[引数としてlua_Stateを渡しています]それに1つしかありません。とにかく、元の関数呼び出しが終了したらlua_Stateが閉じられるので、私はコールバックできなくなります。

私はちょうどluaで始まっているので、luaからcへのバインディングはそれほどよく知られていないので、私はいくつかのばかげた間違いを犯していると思います。今のところ、私はさらに進歩する方法について全く考えていません。

この問題の背景にある話: 私のゲームをCocos2D目的CフレームワークからCocos2d-X C++フレームワークに移植しています。私はLuaのバインディングを使用したいと思うので、私はC++に移植することはできません。とにかく私はルアでそれをやりたい。 私は、誰かがゲーム中に持っている目録のリストにアクセスするシーンを持っています。応答が即時である場合、基本的には在庫リストで開いたウィンドウが表示されます。ただし、データを取得するのに少し時間がかかってしまうと、[接続の問題、重大なオーバーロード...どんな]画面がフェードアウトし、データ転送を示すアニメーションが画面に表示されます。少なくともこれはゲームのobjcバージョンでどのように動作するのか、私は同じことが欲しいです。

研究中に見逃したことはありますか?可能でしょうか?

私はLua socket asynchronous callsを見ましたが、別のものを開始する前にまだ転送の開始を待っているので、私は助けにはなりません。

答えて

5

のようなものLuvit

LuvitはnodeJSの素晴らしい アーキテクチャと依存関係を取り、それがLuaの 言語でどのように適合するか見てクレイジーな何かをしようとする試みです。

このプロジェクトは依然として重い開発の下にありますが、 約束を示しています。こんにちは世界サーバーでの最初のベンチマークでは、これはnodeJSより2倍から4倍速く、 です。

+0

残念ながら、私はiOSとAndroidで動作するものが必要です。残念ながら、私はluaJitを使ってiOSアプリケーションを構築することはできません。 – Krystian

関連する問題