2012-02-27 16 views
1

誰かが私に、シリアライゼーションはソケットを介して物事を送信する最善の方法ではなかったと言いましたが、彼らは一度本でそれを読んだと言っていました。シリアル化が最善の方法であるか、より良い方法があります。また、これがゲームのためのものであれば、それは大きな違いになります。ほとんどの人がシリアライゼーションを使用しているように見えますが、どのようなものがあるかを確認するだけです。シリアル化はソケット経由でデータを送信するのに最適ですか?

答えて

5

基本的にシリアル化するとは、ある種のストレージに適した状態に変換することを意味します。ネットワークを介して送信されるデータは、メモリから取り出されるか、またはHDから取り出され、送信されるための何らかのフォーマットにされなければならない。それはすべて直列化されています。

XMlやJSONにシリアル化されている人は、非常に特定の種類のシリアライゼーションですが、必要に応じてより良いものと悪いものを用意できます。

+0

私が通常使っているのは、BinaryFormatterはソケット以外の構造体を送信するのに最適なものですか?スピードを探しています。 – Shredder2500

+0

あなたの唯一の目標が伝達の速度であれば、そうです。あなたがやっているようにバイナリがベストになるでしょう。 – Jordan

+0

ありがとう – Shredder2500

0

私はあなたの質問に遭遇し、さまざまなトピックについて自分自身を教育する永遠の探求の中で、私はいくつかの読書/研究を行うことに決めました。私はあなたがこれらの事柄に遭遇したかもしれないと確信していますが、Windows Communication Foundation(WCF)についてお読みになりましたか?関連性があるかもしれない記事が1つありますhttp://blogs.msdn.com/b/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx

また、この記事ではProblem with sockets and OutOfMemory errorがソケットベースの通信をどのように行っているかについて話していますが、以前はWCFを考慮していませんでしたが、やや祝福のようです。この記事の一部の人物C# Sending multiple objects over same Socketは、このシナリオでオーバーヘッドが非常に重要な場合はと書かれていますが、それは問題の可能性があります。しかし、私はそれがあなたが達成しようとしているものに依存していると思います。

また、私は熟練者ではないと主張しています。私はできるだけ多くのことを学びたいと思っています。あなたの投稿に関連するトピックからの私の素早い読書は、私をWCFに導いてくれます。このトピックに新しく興味がある人なら、WCFに頼っている方が、自分でプログラミングソケットを使う方が速いかもしれませんが、すでに利用できる基盤があるため、より簡単になると思われます。私はrambledが、私はそれのいずれかのに役立ちます:)

+0

あなたの入力をお寄せいただきありがとうございます。私はWCFについて知っていますが、私と友人がC#とソケットについて話していて、私のプログラムの1つがどのように物事を送っているのかを知りたいと思っていました。彼がシリアライゼーションを使ったのを見たとき、彼はそれを一番良い方法ではなく一度読んだと言ったが、私はそれをする別の方法を聞いたことがないので、なぜ私は尋ねたか – Shredder2500

+0

ねえ、ありがとう。申し訳ありませんが、私の反応があなたが探していたものではない場合。私は確かに問題の専門家ではないが、それについてもっと知りたいので、私はより多くの読書をしてきた。私は、それがベストプラクティスであるとは言えないが、役に立つかもしれないいくつかのリンクを見つけた:http://stackoverflow.com/questions/284885/multi-client-async-sockets-in-c-best-practices (ソケット対WCF)http://stackoverflow.com/questions/1040278/sockets-vs-wcf。 – SMT

+0

あなたのリンクのためにありがとうございました。もしあなたがC#に関するより多くのことを話したいのであれば、私たちはもっと知り合うことができます。私はスカイプを持っていますので、永遠のサイズのコメントはありません。 – Shredder2500

1

を.NETで願っていた場合

は申し訳ありませんが、シリアライズはそうオブジェクトを処理するためのインタフェースはとても簡単で、プログラミングフレームワークによって処理されます。

複雑なオブジェクトをホストAからホストBまで同一に保つ必要がある場合は、シリアル化が便利です。それ以外の場合は、このオブジェクトの1つまたは2つのプロパティをホストBが受け取る必要があり、さらにそれをシリアル化する必要がある場合は、より簡単なオブジェクトにキャストし、新しいクラスを作成する必要があります。

一方、あなたのオブジェクトがフレームワークのシリアル化メソッドとクラスによって変更されないと考えれば、あなた自身のソケットからソケットへの関数を書く必要はないかもしれません。私の意見では、帯域幅を節約する必要がある場合は、独自のソケットツーソケットアプローチを使用する方法です。セキュリティを選択する場合は、シリアル化が必要です。

関連する問題