• ベストアンサー

共有お絵かきシステムの同期の取り方について

現在、共有ホワイトボードになるものを作っています。 今は以下のような方法で同期をとろうとしています。 クライアントからサーバへはソケットで接続し、サーバ側で接続があれば別スレッドで入力を待ち続けます。 スレッドを新しく走らせる時点でクライアントのソケットに対するOutputStreamを配列に入れ、複数のクライアントの出力先の管理をします。 各スレッド毎に入力(描画情報)があると、上記のOutputStreamの配列に対してその要素数分だけfor文をまわし、受け取った情報を接続中のクライアントに出力する。 といった同期の取り方をしています。 しかし、各クライアントからの描画情報はとても多く、クライアントが3人以上になるとすぐに固まってしまったり、クライアント側で情報がごちゃごちゃになり期待通りの描画がされなかったりといったことになります。 共有ホワイトボード等でお絵かき情報の同期の取り方について何か良い考え方はありませんでしょうか?

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • luckymako
  • ベストアンサー率55% (29/52)
回答No.1

ユーザが描いた軌跡データの間引きや、簡単化をすることで負荷を減らすことができませんか? 例えば... ・サンプリング間隔を長くする ・変化量が一定量を下回る場合には間引く ・スプライン曲線などを用いて近似する など?

YOKO-45
質問者

お礼

luckymako様 ありがとうございます。 クライアント側の描画情報の取得&送信処理は別の人が担当しているので、一度提案してみます。

その他の回答 (1)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

全貌も細部もよく見えませんが、基本的に、クライアント制御の部分がない、より広義に言えば、このネットワークアプリケーションにはアプリケーションプロトコル(とその設計)が不在、という感じを受けます。

YOKO-45
質問者

お礼

ranco様 まだまだ初心者で投稿内容にも不十分な点が多かったかと思いすが、ご指摘ありがとうございます。 また、アプリケーションの設計等も初めての試みなので、確かにご指摘の通り設計段階での粗が目立っていると感じています。

関連するQ&A

  • サーブレットはサーバーと同期型、AJAXは非同期型の意味が分かりません

    サーブレットはサーバーと同期型、AJAXは非同期型の意味が分かりません サーバーサイドjavaとか、サーブレットはクライアント側(ブラウザ側)と サーバー側とは同期型だけど、AJAXは非同期型なので軽くて、速いと参考書とかに 書いていましたが、非同期型とはどのような意味でしょうか。  クライアントの意図する情報を先読みして、その情報をバッファとしてサーバーとか に取り込んでいるとか、クライアント側に送信しているとか聞いたことがあるのですが。

    • ベストアンサー
    • AJAX
  • OsirixDB同期について

    当方MAC OS10(サーバ1台、クライアント4台)に、 Osirix3.6.1を導入しております。 質問ですが、サーバ側のデータベースをBonjour機能にて共有にし、 CRからデータ受信後、クライアント側で表示されるまで タイムラグが発生しております。 回線の問題等もあるかもしれませんが、 決まった時間(約5分)必ずかかってしまっている状況です。 クライアント側はデータベースを定期的に更新して、 サーバ側と同期をとっていると思われますが、 同期をとるタイミングを変更することは可能なのでしょうか?

    • ベストアンサー
    • Mac
  • XP HomeEditionでの共有プリンタ出力方法

    Windows Server 2003に接続されている共有プリンタにワークグループでつながっているクライアントパソコンのWindows XP HomeEditionで出力したいのですが、「マイネットワーク」でサーバにログイン(パスワード入力)してからじゃないと出力できません。 できれば、ログイン(パスワード入力)しなくてもクライアントパソコンを立ち上げただけで(もちろんサーバも立ち上がっていることが前提ですが)共有プリンタに出力できる方法がございましたらご教示ください。 もしくは、ログイン(パスワード入力)が必須条件であれば、「マイネットワーク」等を開いてのログイン入力ではなく、もっと簡易的にログインできる方法をご教示ください。 よろしくお願いいたします。

  • サーバ/クライアント間のシステム時間同期

    教えて下さい。 サーバ/クライアントのシステム時間の同期を取りたいのですが Windowsでのサービスでできるの聞いたのですが・・・。 環境は サーバ:Windows2000 Server SP2 クライアント:Windows2000 Professional SP2 接続:社内LAN その他:ActiveDirectory です。 どんな情報でも良いので、ご存知の方、宜しくお願い致します。

  • 共有サーバーとの同期

    デスクトップPCから共有サーバーにはローカルで接続しています(詳しいことはわからないのですが有線LANの場合はアクセスできます、無線LAN等ではアクセスできません) オフラインになった場合は、オフラインファイルを使えるようにしています。 外出時にノートPCから共有サーバーにアクセスしたいと思っています。 ノートPCから共有サーバーに直接アクセスすることは難しそう(オフラインファイルにアクセスすれば可能かなと思ったのですが、保管場所がわかりませんでした)なので、共有サーバーと同じデータをデスクトップPCにバックアップしておき、そのバックアップにノートPCでアクセスすることが出来ないかどうか検討しています。その場合、(1)共有サーバーとデスクトップPCを自動で同期してくれる方法、(2)デスクトップPCとノートPC間でデータをやり取りする方法(オンラインストレージ、webサーバー的なもの?) どのような方法があるでしょうか?もしくは単純に(3)共有サーバーとwebサーバー的なものと同期する方法?(ノートPCでデスクトップPCのバックアップにアクセスせずに、外部の同期されているファイルにアクセスします)はありますか? ローカルでしか接続できない共有サーバーのデータに外部からアクセスしたい、共有サーバーのデータそのものではなくても、極力最新のデータにアクセスしたいというのが希望です。ちなみに外部から共有サーバーのデータを更新できなくてもかまいません。 よろしくお願い致します。

  • ソケットを使った「非同期」通信について

    はじめまして。VB.NETで質問があります。内容は、(スレッドと)ソケットを使った「非同期」通信についてです。 マイクロソフトのページからサンプルコードをコピーして、二行のプロジェクトを作成し以下の二つのコードを追加したんですけど…(ipの指定は、GetHostNameを使っています。) プロジェクト1:非同期クライアント ソケットの例 Button1_Click AsynchronousClient.Main() プロジェクト2:非同期サーバー ソケットの例 Button1_Click AsynchronousSocketListener.Main() マイクロソフトのページ(ソケットのコード例) → http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconsocketcodeexamples.asp プロジェクト2のフォームが固まってしまいます。 (Waiting for a connection...を出力ウィンドウに表示したままになってしまいます。) 暫定策として、Shellを使って、サーバー(プロジェクト2のexe)を起動してみたのでが、それでも固まってしまいました。 3日間ぐらいかけてネットで検索とMSDN見たけど、分かりませんでした。キーワードは、以下の通り… 「マイクロソフト .NET スレッド フリーズ サンプルコード 非同期 マルチ select -sql」 Select フックなどの言葉も関係があるようなのですがよく分かりません。 ただ、フォーム上のボタンが押せるようになれば、解決です。 なにかキーワードだけでも、教えてください。お願いします。

  • プリンターの共有

    プリンターの共有をしているのですが、共有プリンターにしているPCのトラブルでWindowsリカバリーをして以来、プリントできず困っています。 プリンターを接続したPC(以下プリントサーバー、または単にサーバー)とリモートプリントをするPC(以下クライアントPC、またはクライアント)は、いずれもWindows XPです。 クライアントから印刷を掛けて、ステータスをモニターしていると、サーバーに印刷データが届き、プリント出力になるが一向に印刷を始めません。

  • ファイル共有不可

    ファイル共有していたフォルダへのアクセスが 本日朝、急に接続できなくなりました。 8人程度のユーザがいるのですが、 アクセスできるクライアントと アクセスできないクライアント、 半々くらいに分かれます。 サーバはwindows_server2003で、 ActiveDirectory単独にファイル共有を設けています。 アクセス権限を本日、確認したところ すべてのユーザが使用できていたときと同様 正常な値が入力されておりました。 イベントビューアには特にエラーメッセージが出力されておりません。 確認する箇所がありましたらご教授ください。 よろしくお願いします。

  • 共有されているパソコンのフォルダ参照

     こんばんは。 業務で使用しようとしているアプリで、大変煮詰まっている 部分がございます。 お教えください。  共有フォルダ設定されたフォルダ(サーバー)に、MFCプロジェクトのexeを置き、 それを同ネットワーク上の別のパソコン(クライアント)から起動した時、 exeの動きとしてC直下にtxtファイルを作る("C:\temp.txt"と指定) ものなのですが、サーバーにではなくクライアント側に作成されてしまいます。  exeがサーバーにいるのだから、クライアントで共有フォルダ越しに起動しようが サーバー側のC直下にtxtができるだろうと思って実装したのですが・・・  クライアントが共有フォルダ越しにサーバーのexeを起動したとしても、 サーバー側のC直下にtxtを出力させる方法はございますでしょうか。

  • フォルダの共有はできるのに、プリンタの共有ができません

     こんばんは。  初めて質問させていただきます。先日、デスクトップPC(サーバー)とノートPC(クライアント)を無線ブロードバンドルータを使って接続し、フォルダとプリンタの共有化をしてみました。それぞれコンピュータ名を設定し、同一のワークグループ名を設定した結果フォルダの共有はアッサリできたのですが、プリンタの共有がどうしてもうまくいきません・・・。  某サイトに従って両方のPCにて、プリンタのポートをこれまで使っていた「LPT1」から「\\サーバのコンピュータ名\プリンタの共有名」に変更し、プリンタのドライバをインストールし、サーバー側とクライアント側どちらにも共有プリンタのアイコンが表示されてはいるのですが、いざ文章を印刷しようとすると、プリンタへ出力しようとはするものの、常駐バーのプリンタのアイコンが点いたり消えたりしてそこから先に進みません。おかしいと思ってそのアイコンをダブルクリックして詳細ウィンドウを開くと、なぜかタスクが2つありその内の1つが点いたり消えたりしていました(状態の欄にスプールという文字が出ていました)。ここ2日間あれこれと試したのですが、余計わからなくなってきてしまいました。今現在はサーバ側のプリンタポートを「LPT1」に戻し、サーバ側PCからは印刷できるようにはなっているのですが、どうしても原因が知りたく投稿させていただきました。 どなたか有識者の方いらっしゃいましたら、どうか回答宜しくお願いいたします。

専門家に質問してみよう