0

私はこのサーバーにマングースを使用しています。マングースはリクエストを受け取り、情報を解析し、アクションを実行して結果を返します。

たとえば、次のように照会できます server:port/action?arg1=test&arg2=...

私の問題は、サーバーにクエリを実行するたびに、「MG_OPEN_FILE」イベントしか取得できないことです。そして、リクエストごとに3つ取得します。

httpクエリにいくつかあるのは普通かもしれないと読みましたが、ここでの問題は、「MG_NEW_REQUEST」イベントがないことです。

基本的に、サーバーを起動するたびに、最初の接続 (およびその後のすべての接続) は常に次のイベントを返します: MG_OPEN_FILE

MG_OPEN_FILE

MG_OPEN_FILE

MG_REQUEST_COMPLETE

私はこの方法でサーバーを呼び出します:

int main(int argc, char* argv[]) {
  struct mg_context *ctx;
  const char *options[] = {"listening_ports", "8080", "num_threads","10",  NULL};
  ctx = mg_start(&callback, NULL, options);
  while(1){  
      getchar(); // Wait until user hits "enter"
  }
  mg_stop(ctx);
  return 0;
}

そして、コールバック関数は次で始まります:

static void *callback(enum mg_event event, struct mg_connection *conn)
{

const struct mg_request_info *request_info = mg_get_request_info(conn);
if (event == MG_NEW_REQUEST)
{

しかし、それは常に「MG_OPEN_FILE」イベントであり、私には理由がわかりません:(したがって、誰かがこの理由について何か考えを持っているなら、私は非常に感謝しています!

4

2 に答える 2

1

が表示されたら、 マングースが開きたいファイル名が含まれていることMG_OPEN_FILEを確認します。(char *) mg_get_request_info(conn)->ev_dataそのファイルがメモリにある場合は、そのデータとサイズを返します。そうでない場合は、 を返しNULLます。

于 2013-01-31T10:44:48.493 に答える
0

イベントを処理したことをコールバックが返していますか? イベントを処理する場合にのみ「はい」を返します。

于 2013-01-18T21:51:36.010 に答える