2011-11-19 4 views
7

मैं सी # के साथ एक वेबस्केट सर्वर विकसित कर रहा हूं और मैंने देखा है कि प्रेषण() विधि का उपयोग कर ब्राउज़र से आने वाले सभी संदेश (उस मामले में क्रोम) 126 वर्ण लंबाई अधिकतम हैं। यह हर समय होता है जब मैं 126 वर्णों को बड़ा संदेश भेजना चाहता हूं, ऐसा लगता है कि प्रोटोकॉल की तरह किसी भी संदेश को 126 वर्णों में बड़ा कर दिया जाता है और केवल पहले 126 वर्णों को स्थानांतरित किया जाता है। मैंने प्रोटोकॉल परिभाषा की जांच करने की कोशिश की लेकिन मुझे कोई जवाब नहीं मिला।मैं वेबसाकेट पर बड़े संदेश कैसे भेज सकता हूं?

तो, मेरा सवाल है, क्या मैं वेबसाकेट पर बड़े संदेश भेज सकता हूं?

अद्यतन: इस तरह है कि मैं अपने सी # WebSocket सर्वर में ग्राहक (क्रोम) से संदेश को पार्स कर रहा हूँ है:

private void ReceiveCallback(IAsyncResult _result) 
    { 
     lock (lckRead) 
     { 
      string message = string.Empty; 
      int startIndex = 2; 
      Int64 dataLength = (byte)(buffer[1] & 0x7F); // when the message is larger then 126 chars it cuts here and all i get is the first 126 chars 
      if (dataLength > 0) 
      { 
       if (dataLength == 126) 
       { 
        BitConverter.ToInt16(buffer, startIndex); 
        startIndex = 4; 
       } 
       else if (dataLength == 127) 
       { 
        BitConverter.ToInt64(buffer, startIndex); 
        startIndex = 10; 
       } 

       bool masked = Convert.ToBoolean((buffer[1] & 0x80) >> 7); 
       int maskKey = 0; 
       if (masked) 
       { 
        maskKey = BitConverter.ToInt32(buffer, startIndex); 
        startIndex = startIndex + 4; 
       } 

       byte[] payload = new byte[dataLength]; 
       Array.Copy(buffer, (int)startIndex, payload, 0, (int)dataLength); 
       if (masked) 
       { 
        payload = MaskBytes(payload, maskKey); 
        message = Encoding.UTF8.GetString(payload); 
        OnDataReceived(new DataReceivedEventArgs(message.Length, message)); 
       } 

       HandleMessage(message); //'message' - the message that received 

       Listen(); 
      } 
      else 
      { 
       if (ClientDisconnected != null) 
        ClientDisconnected(this, EventArgs.Empty); 
      } 
     } 
    } 

मैं अभी भी समझ में नहीं आया कि कैसे मैं बड़ा संदेश प्राप्त कर सकते हैं, यह शायद ओपोड के साथ कुछ है, लेकिन मुझे नहीं पता कि यह काम करने के लिए क्या बदलना है?

उत्तर

6

वेबसॉकेट संदेश किसी भी आकार का हो सकता है। हालांकि, सिर-ऑफ-लाइन अवरोध से बचने के लिए बड़े संदेश आमतौर पर कई हिस्सों (टुकड़े) में प्रेषित होते हैं। विवरण के लिए WebSockets I-D देखें।

+0

मैंने अपने प्रश्न में लिखा था कि मैं वहां गया था और मुझे कोई जवाब नहीं मिला, क्या आप अधिक विशिष्ट हो सकते हैं? – udidu

+0

[धारा 5.4] (http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.4) – dtb

+0

क्या आप इसके साथ मेरी मदद कर सकते हैं? कोई छद्म कोड जो मुझे बड़े आकार के संदेश प्राप्त करने में मदद करेगा, धन्यवाद होगा .. – udidu

0

यह सही नहीं है कि आपने डीटीबी क्या कहा था। भेजना निश्चित रूप से 126 से अधिक वर्णों का समर्थन करना चाहिए। यह आपके आउटपुट को सही तरीके से स्वरूपित करने का विषय है। अगर हम 126 वर्ण तक सीमित थे तो वेबआरटीसी के लिए कोई सिग्नलिंग सर्वर नहीं होगा। मैं इस संदेश संदेश को संहिता दूंगा और इसे समाप्त होने पर इसे यहां पोस्ट करूंगा।

2

मुझे इस तथ्य के बारे में पता है कि आप 126 वर्णों से बड़े संदेश भेज सकते हैं,
मैं प्रोटोबफ पर डेटा भेजने में सक्षम हूं जिसमें स्ट्रिंग्स हैं जिनमें स्वयं 126 वर्ण हैं। http://www.websocket.org/echo.html
यदि आप इस वेबसाइट को देखते हैं तो आप अपने संदेशों का परीक्षण कर सकते हैं। (ध्यान दें कि यह टुकड़ों का उपयोग नहीं करता है)

+0

हाँ मैंने 524k बाइट भेजने की कोशिश की और बदले में केवल 131k मिले: http://i.stack.imgur.com/aDh9O.png – Pacerier