2009-07-10 14 views
0

Javaプログラム(Jackと呼ぶ)とObjective-Cプログラム(Oscarという)を同じMac OS Xコンピュータで実行しています。 Oscarは、1秒に1回、ソケットを介してJackに文字列メッセージを送信します。ソケット経由のObjective-CからJavaへのデータの送信

ジャックとオスカーの間にオープンソケットを維持する方が信頼性とパフォーマンスが良いでしょうか?または、繰り返しソケットを開いてメッセージを送信し、ソケットをもう一度閉じたほうがよいでしょうか?

答えて

2

開いたままにしてください。あなたはそれをたくさん必要としています(1秒に1回)、新しいソケットを開く際にいくつかのオーバーヘッドがあります。さらに、ガベージコレクタが来るまで、新しいオブジェクトでヒープを噛んでいます。

0

申し訳ありません申し訳ありませんが、すばやく質問を読みました。はい、私はそれがローカルマシン上にある場合、ソケットを開いたままにします。割り当てられているすべてのメモリを開閉する必要はありません。その場合、前後に粉砕することは助けにならない。

ちょうど私が正しく理解しているので、Cocoa APIから返された情報にアクセスできないJavaアプリケーションにデータを渡すことができるように、接続をリッスンするCocoaサーバーアプリケーションを作成していますか?

あなたはJavaのターミナルコマンドから結果を得ることはできませんでしたか?私は完全に推測していますが、もしこれがあなたの計画を改善できると思ったら私は考えました。

+0

これはネットワーク経由ではありません。両方のプロセスは同じマシン上でローカルに実行されます。 私は定期的にJavaで利用できないMacシステム情報を入手する必要があります。 –

1

Java Native Interfaceの呼び出しを簡単に行うことはできますか?個人的には、私はローカルでソケットをつまむことはやり過ぎかもしれないと思っていますが、もう一度、あなたが達成しようとしていることに関するすべての話は分かりません。

+0

これはコメントではありません。あなたが何らかの理由で1台ではなく2台のマシンを使用する場合、次の問題が発生すると思います。 – OscarRyz

+0

私はJNIとソケットを使って体重を増やしました。 JNIは厄介なもので、乱雑なバグになりがちです。 –

2

ジャックを開いたままにしておきます。次の秒にもう一度やり直すには、接続を開いたり閉じたりするために既にCPUサイクルが必要です。

1

パケットをドロップする場合は、代わりにUDPを使用することをお勧めします。

毎回、長期間のTCP接続は、接続が悪くなったときにちょっとファンキーでハングアップします。通常は回復しますが、必ずしもそうではありません - そして、その間に彼らは遅くなることがあります。

UDPは

は、オープン接続を維持...あなたはすべてのデータごとに再送していて、歴史を気にしないので、一つ一つのパケットを必要としなかった場合は、より良い動作させることが行われていますあなたのために働くと理論的にはうまくい...私はいつも最高の運を持っていませんでした。

関連する問題