मुझे एक रिमोट सर्वर को एसिंक्रोनस सॉकेट कनेक्शन और रीटिव डेटा से कनेक्ट करना होगा। मैं कनेक्ट कर सकता हूं लेकिन एक समस्या है।असीमित सॉकेट क्लाइंट बफर आकार
पैकेज टुकड़े भेज रहे हैं। मेरे पास दो विकल्प हैं; मैं एक बफर सेट कर सकता हूं और पूरे पैकेज को एक टुकड़े में प्राप्त कर सकता हूं या सभी स्थानांतरण किए जाने पर टुकड़ों को जोड़ सकता हूं। मुझे लगता है कि पहला विकल्प (बफर चीज) सही तरीका है।
मैं एक बफर आकार परिभाषित कर रहा हूं लेकिन यह पहले भाग में काम नहीं कर रहा है। अन्य भागों में, यह काम करता है लेकिन इस विधि के साथ मैं एक टुकड़े में पूरा पैकेज नहीं प्राप्त कर सकता क्योंकि पहला भाग 5,24 Kb के साथ सीमित है।
आप पा सकते हैं नीचे मेरी कोड:
$loop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
$connector = new React\SocketClient\Connector($loop, $dns);
$connector->create(ENDPOINT_IP , ENDPOINT_PORT)->then(function (React\Stream\Stream $stream) use ($loop) {
$command = '{C:"EL",bmId:43,inst:"my_instance",tok:"my_token"}';
$command_length = strlen($command);
$command_length = pack("N", $command_length);
$stream->write($command_length);
$stream->write($command);
$stream->bufferSize = 999999;
$stream->on('data', function ($data) {
$package = substr($data, 0, 4);
$unpack = unpack('N', $package); // I'm getting whole package size
echo $data;
});
});
$loop->run();
मैं $stream->on('data', function ($data) {
रेखा के नीचे एक बफर आकार को परिभाषित करने की कोशिश की, लेकिन जैसा कि आप अनुमान लगा यह विफल रहा है। मुझे नहीं पता कि इसे सही तरीके से कैसे संभाला जाए।
अग्रिम धन्यवाद।
दरअसल मैंने आपके सुझावों सहित कई चीजों को आजमाया लेकिन परिणाम समान है। –
एचएम, आपने यह नहीं बताया है कि आपके पास क्या सटीक समस्या है। कृपया परिणाम के रूप में आपको जो भी मिलता है उसे पोस्ट करें और क्या अपेक्षित है। यदि आप एक प्रतिक्रिया में से एक से अधिक पैकेज प्राप्त कर रहे हैं, तो आपको अतिरिक्त तर्क होना चाहिए। जब एक पैकेज के लिए सभी डेटा आम तौर पर पहुंचे हैं तो आपको उसी प्रतिक्रिया में अगले पैकेज का हिस्सा मिल जाएगा। डेटा को शुरू करने के रूप में आपको अगली पुनरावृत्ति में सहेजने और उपयोग करने के लिए आवश्यक अतिरिक्त डेटा। – BJovke