पहले थोड़ा सा संदर्भ: मैं स्कैला (प्रथम व्यक्ति शूटर-जैसी) में क्लाइंट/सर्वर गेम लिख रहा हूं, जहां क्लाइंट को सर्वर पर आंदोलन के इरादे भेजने की आवश्यकता है प्रति सेकंड कुछ दर्जन बार और सर्वर वास्तविक समय में, इकाई राज्यों को वापस भेजता है। दोनों क्लाइंट (ग्राफिकल तरलता के लिए) और सर्वर पक्ष पर जेबलेट का उपयोग करके इन इकाइयों का भौतिक सिमुलेशन है। जब भी कोई ग्राहक सर्वर से अद्यतन प्राप्त करता है, तो यह सर्वर के भेजे गए लोगों के साथ अपने स्थानीय राज्यों को प्रतिस्थापित करता है। निश्चित रूप से एक ही पल में एक ही सर्वर पर कई ग्राहक हो सकते हैं। संक्षेप में, इस एप्लिकेशन में अक्सर छोटे पैकेट के साथ संचार होता है।नेटवर्क पर अक्का के साथ स्कैला केस क्लासेस बनाम प्रोटोकॉल बफर
फिलहाल, मैं अक्का के कलाकारों का उपयोग सर्वर पर और पीछे नेटवर्क पर स्काला केस कक्षाओं को भेजने के लिए कर रहा हूं।
sealed trait PlayerMessage
case class PlayerMove(dir: Vector3, run: Boolean) extends PlayerMessage
// more case classes...
तो ग्राहक पर
:
server ! PlayerMove(dir, run)
सर्वर पर: यहाँ एक उदाहरण है
def receive = {
case pm: PlayerMessage => pm match {
case p @ PlayerMove(dir, run) =>
// Move the player
world.playerMove(dir,run)
// More case tests..
}
// Send back entity states (this in fact occurs elsewhere, asynchronously)
world.entities.foreach(ent => client ! ent.state()))
// More message testing ...
case _ => // ignore
}
कहाँ ent.state एक EntityState रिटर्न:
case class BulletState(pos: Vector3, quat: Vector4, lin: Vector3, ang: Vector3)
sealed trait EntityState
case class EntityStatePlayer(id: Int, bullet: BulletState) extends EntityState
// more case classes...
यह सब बहुत अच्छी तरह से काम कर रहा है लेकिन जैसा कि आप देख सकते हैं वहां कई केस क्लास हैं, कभी-कभी अन्य केस क्लास होते हैं, और क्लाइंट और सर्वर दोनों पर केस टेस्ट का एक समूह होता है।
- मैं सीरियलाइजेशन, deserialization और मिलान से पैकेट आकार और ओवरहेड दोनों कैसे कम कर सकते हैं?
- केस कक्षाओं के बजाय प्रोटोबफ का उपयोग करना मेरे आवेदन के पैकेट से वसा को काट देगा?
- क्या मैं इस नेटवर्क प्रोटोकॉल के सुधार के लिए गलत जगह देख रहा हूं?
मैंने पहले से ही इन्हें पढ़ लिया था, लेकिन मुझे अभी भी अस्पष्ट नहीं है अगर एक केस क्लास को Google प्रोटोबफ के रूप में क्रमबद्ध किया गया है या नहीं; मुझे नहीं लगता। इसलिए मैं यह जानना चाहता हूं कि मैं अपने केस क्लास को प्रोटोबफ्स में बदलने से क्या प्राप्त कर सकता हूं, अगर यह बिल्कुल मूल्यवान है। उनके चारों ओर ओवरहेड किसी भी वास्तविक लाभ को हटा सकता है; Wireshark बाद में मदद कर सकते हैं। – gsimard
यदि आपके पास 'proto =" akka.serialization.ProtobufSerializer "आपकी कॉन्फ़िगरेशन में है, तो Protobuf serialization के लिए उपयोग किया जाता है। – leedm777
दस्तावेज़ों के प्रासंगिक खंड को पढ़ें: http://doc.akka.io/docs/akka/2.0/scala/serialization.html –