nicokaiser-php-websocketを使ってあそんでいます。


Serverのcron等からイベントを発生させクライアントにデータを送信したいのですが、どうするのがベターでしょうか?

onUpdate等で、sqlを毎回読んでいると sleep等をはさんでも負荷が心配です。

phpやシェルスクリプトで、websocketパケットを送信する方法がやはりよいのでしょうか?

簡単なサンプルもついてお返事いただけると嬉しいです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/17 13:45:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント67pt

Websocketは、基本的にクライアントからsocketサーバへコネクトしてから通信を始めるものなので、サーバからクライアントへデータを配信する用途には向きません。

たとえば定期的にサーバからWindowsクライアントへデータ配信したいなら、Windowsのタスクスケジューラにsocket通信を実行させるタスクを組み込んでやる必要があります。

id:kichitaka

例えば、ちゃっと中に、何か有ったときつながってる相手にのみ送信の用な事がやりたいのです。DBに入っている値が変化した等。
変化したかどうかはcronを回せばいいのですが、そのcronからWebsocketをつかってどう送るべきなのか。。

2013/03/10 18:55:04
id:oil999

回答したように、Websocketは、まず、クライアントからsocketサーバへコネクトする必要があります。
チャット中にクライアント側がコネクションを張ってくれればデータ送信は可能になりますが、サーバ側から強制的にデータを送る手段はありません。

PHPでWebSocketを使ったリアルタイムチャットを作る

http://blog.snowcait.info/2012/01/14/php%e3%81%a7websocket%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e3%82%8b/#more-264

2013/03/10 21:35:27
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント67pt

負荷に関してはapache+php+MySQLなどを使ったWebサービスとさほど変わるものではなく、
負担がかかるとすればデータ通信量による負荷(通信帯域の限界)のほうが先にきます。

下記記事などを参考にされると良いでしょう。
さくらのVPSとPHPでWebSocketをサクっと勉強してみる
http://demouth.hatenablog.com/entry/20110111/1294699568
http://demouth.hatenablog.com/entry/20120102/1325516167

id:TransFreeBSD No.3

回答回数668ベストアンサー獲得回数268

ポイント66pt

具体的な内容によりますが、全クライアント共通のデータならば、cronでイベントチェックしてデータを作成したら、それをキャッシュしておけば良いのでは?
具体的にはキャッシュ用のテーブル作って、更新時間とキャッシュデータからなるレコードを1レコードを収めておきます。
cron側ではそれを更新し、クライアント側は更新時間をみて前回から更新されているかチェックし、更新されていればキャッシュデータを読みます。
これをデータベースでやってもクエリは単純に1レコード読むだけで、なんら複雑なクエリではありません。クエリの間隔もcronでの更新を検知するためですから、数分から、短くとも数十秒単位でしょう。このクエリで負荷を問う様であれば、そもそもメインの処理を維持できるとは思えません。
それでも気になるという場合はmemcachedなどを検討してはどうでしょうか。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません