質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3801閲覧

ポーリングの処理がわかりません…

ktr

総合スコア29

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2015/10/01 10:13

現在クライアントをiOS、サーバをrailsでポーリングで通信したいと考えています。
そこでクライアントではNSTimerを用いて、一定期間でGETリクエストを送ると思うのですが、「サーバに変更等があれば情報を取ってきて、なければ何もしない」の部分の実装がわかりません。
これはサーバ側でif文などを使い制御するのでしょうか?

やりたいこととしては、データベースに入っている2人の緯度経度の中間地点を計算し外部APIにリクエストを出し、結果レスポンスが帰って来次第、それをクライアントに返したいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2015/10/01 15:15

「サーバに変化」とは、サーバ上にあるなんの情報が変化していることを意図していますか? 「相方」の緯度経度? また、外部APIというのは同じ位置情報を与えれば同じ計算結果が得られるようなものなのですか?
ktr

2015/10/01 23:33

サーバに変化・・・「DBに入っている複数人の緯度経度を計算して、外部APIには投げ、レスポンスが返ってきたら」という意味です。外部APIには複数人の緯度経度の中間地点の緯度経度を与えると、その辺の周辺情報が返ってくるものです。 よろしくお願いいたします。
guest

回答1

0

ベストアンサー

「グループメンバー全員が集まりやすい遊び場所」を提案してくれるようなシステムだという解釈でよろしいでしょうか。

「サーバに変更等があれば情報を取ってきて、なければ何もしない」という要件、たまに出てくるんですが、このシステムにとって必要でしょうかね…?

総論から述べます。

一般的にポーリングにおいては、「サーバに変更等があれば情報を取ってきて、なければ何もしない」ような処理の必要はありません。サーバはただ聞かれたら最新の情報を返すだけ、クライアントは定期的にサーバに聞きに行き、前回とレスポンスが違ったら変化を認識して何か動作する、です。

「変更があれば」が重要になってくるのはリアルタイムに変化を検知する必要がある場合です。この場合、ただのポーリングではいけません。聞きに行く間隔の分、遅延が発生しますからね。遅延をなくすためにはロングポーリング(Webの世界では「COMET」とも)をします。

ロングポーリングでは、クライアントが【前回のレスポンス値】も引数として渡します。サーバは、現在値が前回と同じならレスポンスを返さず、クライアントを待たせます。現在値が変化したら途端に最新値をレスポンスとして返します。(通常は、変化がなくても一定時間でレスポンスを返し、クライアントはまたロングポーリングを投げなおします)

ロングポーリングの実装は、言うは易く行うは難しでなかなかややこしいため、これ以上詳しく述べるのはやめておきます。

さてご質問のシステムの件ですが、「変化があれば」というのは、全員の重心座標が変化してもいないのに外部APIを何度も呼び出したくない、という意味でしょうか。それだけでしたらサーバ側では【最新のAPIレスポンス】と【そのときの重心座標】を記録しておき、GETの際には重心座標が変わっていた場合に限り外部APIを呼び出して記録を更新する、という処理にすれば十分かと思います。通信スキームはもちろん単純なポーリングとなります。

投稿2015/10/03 14:09

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問