मैं ज्यादातर नेटटी के साथ हूं लेकिन एक अवधारणा अभी भी मुझे बता रही है, और मुझे ट्यूटोरियल्स में कुछ भी नहीं मिला है। सबसे पहले मैं समझता हूं कि नेटी असीमित है, लेकिन क्लाइंट को सर्वर पर कॉल करने और हैंडलर से परे प्रतिक्रिया प्राप्त करने में सक्षम होना चाहिए। मुझे और समझाएं।नेटटी - क्लाइंट में सर्वर प्रतिक्रिया कैसे प्राप्त करें
मेरे पास एक ग्राहक है जैसा कि नीचे दिखाया गया है। और कृपया ध्यान दें कि मैं समझता हूं कि यह बूटस्ट्रैप किया गया है और प्रत्येक कॉल पर एक नया कनेक्शन स्थापित किया गया है, जो कि उदाहरण को छोटा और अधिक संक्षिप्त बनाने के लिए है। कृपया उस तथ्य को अनदेखा करें।
Client.java
// ServerResponse is a result from the server, in this case
// a list of users of the system (ignore that each time it's all bootstrapped).
public User[] callServerForInformationFromGUIWidget()
{
ClientBootstrap bootstrap = new ClientBootstrap(...);
bootstrap.setPipelineFactory(...);
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
Channel channel = future.awaitUninterruptibly().getChannel();
// Where request is a POJO sent to the server,
// with a request such as get me a list of users
RequestPojo request = new RequestPojo(requestUserListCommand);
ChannelFuture lastWriteFuture = channel.write(request);
if(lastWriteFuture != null)
lastWriteFuture.awaitUninterruptibly();
}
अब मैं समझता हूँ सर्वर पर डेटा प्राप्त करने के लिए है, और परिणाम वापस आग। एकमात्र चीज यह है कि मैं इसे क्लाइंट साइड पर कैसे संभाल सकता हूं?
ClientHandler.java
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
{
User[] users = (User[])e.getMessage();
}
समस्या कैसे ग्राहक कोड वास्तव में उस परिणाम प्राप्त करता है: हाँ ClientHandler वर्ग निम्नलिखित की तरह कुछ कर सकते हैं? सभी उदाहरण एक चैट सेवा के समान हैं, जहां ईवेंट उस क्लाइंट पर कुछ और निकाल देता है जो प्रतिक्रिया पर इंतजार नहीं कर रहा है। यहां तक कि http क्लाइंट उदाहरण में मुझे कमी आई है। कुल मिलाकर दस्तावेज वास्तव में अच्छा है, लेकिन कॉलबैक कैसे करें इस पर कमी है। वैसे भी, इस मामले में मुझे सर्वर से प्रतिक्रिया प्राप्त करने के लिए क्लाइंट की आवश्यकता है, और परिणामों के आधार पर यह वही करेगा जो इसकी आवश्यकता है।
दूसरे शब्दों में, मैं कैसे ग्राहक को इस तरह कुछ करने के लिए लिख सकता हूँ:
IdealClient.java
// ServerResponse is a result from the server, in this case
// a list of users of the system.
public User[] callServerForInformationFromGUIWidget()
{
...
RequestPojo request = new RequestPojo(requestUserListCommand);
ChannelFuture lastWriteFuture = channel.write(request);
if(lastWriteFuture != null)
lastWriteFuture.awaitUninterruptibly();
User[] users = resultFromCallToServer();
performSomeAction(users);
}
क्योंकि हैंडलर पता नहीं है जो इस सवाल का जवाब है, या जो की तलाश में है सवाल पूछा। और अगर यह हैंडलर में किया गया है, तो कैसे?
उदाहरणों के बारे में मेरी टिप्पणियों पर वापस, http क्लाइंट (और हैंडलर) उदाहरण केवल System.out पर परिणाम डंप करें। यदि आपके पास एक जीयूआई है तो आप अपने अनुरोध से जीयूआई तक परिणाम कैसे पारित करेंगे? मैंने इसके लिए कभी भी कोई उदाहरण नहीं देखा।
मैं श्रोताओं को पंजीकृत करने के लिए अपने दिशानिर्देश का पालन करने की कोशिश कर रहा हूं लेकिन मुझे "असंगत प्रकार: स्ट्रिंग को डेटाChangeEvent में परिवर्तित नहीं किया जा सकता" ... क्या गलत है? धन्यवाद। – Phobox