人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: kichitaka
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● oil999
●67ポイント

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

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


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

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

2 ● うぃんど
●67ポイント

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

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


3 ● TransFreeBSD
●66ポイント

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ