2010-12-30 17 views
6

का उपयोग कर एक चैट एप्लिकेशन बनाना मैं रूबी का उपयोग करके पूरी तरह से चैट एप्लिकेशन बनाने की कोशिश कर रहा हूं। पहले similar question पोस्ट किया गया है, लेकिन मेरे पास अलग-अलग और संबंधित प्रश्न हैं। मैंने this example देखा है (उसी व्यक्ति द्वारा संदर्भित किया गया है जिसने पहले एक समान प्रश्न पोस्ट किया था)। उदाहरण में कोड मेरे लिए काम नहीं कर रहा है। टर्मिनल पर रूबी स्क्रिप्ट चलाने पर, और यूआरएल से कनेक्ट करने पर: http://localhost:1234 मेरे ब्राउज़र में, मैं अनिश्चित काल तक "स्थानीयहोस्ट से डेटा स्थानांतरित कर रहा हूं ..." संदेश का सामना करता हूं।रुबी

यहां 1234 पोर्ट उदाहरण है जो प्रदान किए गए उदाहरण में उपयोग किया जाता है। मैं यह समझने में सक्षम नहीं हूं कि मेरे असफल दौड़ के पीछे क्या कारण है। स्क्रिप्ट को निष्पादित करते समय मुझे कमांड लाइन में कुछ निर्दिष्ट करने की आवश्यकता हो सकती है या मुझे किसी अन्य स्थान (शायद ब्राउज़र) के माध्यम से चैट (इनपुट आउटपुट) शुरू करना है। मैं यह समझने में सक्षम नहीं हूं कि वास्तव में क्या करना है। क्या आप इस पर मेरी मदद कर सकते हैं?

मैं चैट सर्वर कोड बहुत अधिक असम्बद्ध हूं। मैं उसी होस्ट पर वेब सेवा और चैट सर्वर चला रहा हूं।

मैं उस बिंदु तक आंशिक रूप से मेरे लिए काम कर रहा कोड प्राप्त करने में सक्षम था जहां लूप शुरू होता है। संशोधित कोड जो मेरे लिए एक निश्चित बिंदु तक काम करता है नीचे दिया गया है।

require 'gserver' 

class BasicServer < GServer 

    def initialize(*args) 
    super(*args) 

    # Keep an overall record of the client IDs allocated 
    # and the lines of chat 
    @@client_id = 0 
    @@chat = [] 
    end 


    def serve(io) 
    # io.puts("Hello world!") 
     # Increment the client ID so each client gets a unique ID 
    @@client_id += 1 
    my_client_id = @@client_id 
    my_position = @@chat.size 


    # io.puts(@@chat.size)  
    # Give the total number of people who are currently on chat.. for e.g. 0 => 1 person on chat  

    # Leave a message on the chat queue to signify this client 
    # has joined the chat 
    @@chat << [my_client_id, ""] 

    # io.puts(@@chat)  

    end 

end 


server = BasicServer.new(1234) 
server.start 

#sleep 120 
#server.shutdown 

हर ब्राउज़र उदाहरण एक नए ग्राहक चैट कतार से जुड़ा है के लिए (वे अद्वितीय ग्राहक आईडी के लिए उन्हें पहचान करने के लिए है)। मैं उस उदाहरण में कोड का पुन: उपयोग करना चाहता था जिसमें टेक्स्ट बॉक्स (एचटीएमएल में जो कुछ भी हम एचटीएमएल में उपयोग करते हैं) को ब्राउजर इंस्टेंस (ओं) में चलाते हैं जिसमें उपयोगकर्ता अपना संदेश दर्ज कर सकते हैं और इसे क्लिक करके इसे पोस्ट कर सकते हैं एक बटन (जो ब्राउज़र में भी एकीकृत है)। यह विभिन्न ग्राहकों के सभी अन्य ब्राउज़र उदाहरणों में प्रतिबिंबित होता है और जब तक चैट रूम छोड़ने के लिए उपयोगकर्ता स्ट्रिंग "छोड़ने" में प्रवेश नहीं करते हैं तब तक चैट इस तरह से चलती है।

मुझे यकीन नहीं है कि रूबी में उपर्युक्त सुविधा को कैसे कार्यान्वित किया जाए, किसी भी सुझाव या संबंधित लेख संदर्भ में वास्तव में सहायक होंगे।

बहुत बहुत धन्यवाद !!

उत्तर

4

मुझे लगता है कि यह एकमात्र कोड है जिसका आप उपयोग कर रहे हैं। जिस तरह से HTTP (प्रोटोकॉल आपके वेब ब्राउजर आपके सर्वर से बात करते समय उपयोग करता है) काम करता है, यह है कि ब्राउजर आपके सर्वर से जुड़ता है, कुछ लाइनें कहता है कि वह कौन सा पेज प्राप्त करना चाहता है, इसमें कौन सी कुकीज़ है, आदि। सर्वर तब जवाब देता है, और ज्यादातर मामलों में, कनेक्शन बंद कर देता है। तो आपके मामले में, जब आप अपने वेब ब्राउज़र में चैट सर्वर से कनेक्ट होते हैं, तो ब्राउज़र कनेक्ट होता है, BasicServer#serve कॉल हो जाता है, कुछ सामान वापस भेज दिया जाता है, और वेब ब्राउज़र कनेक्शन बंद कर देता है, इसलिए सर्वर अधिक डेटा नहीं भेज सकता ब्राउज़र। इसे "ठीक करने" का सबसे आसान तरीका है अपने सर्वर से कनेक्ट करने का एक अलग तरीका (या तो टेलनेट या एनसी (नेटकैट)) का उपयोग करना। यदि आप इसे ब्राउज़र में रखना चाहते हैं, तो आपको अपने सर्वर को HTTP अनुरोधों का जवाब देना होगा, और उसके बाद एक पृष्ठ वापस करना होगा जो नियमित रूप से सर्वर को मतदान करता है (AJAX या WebSockets पर पढ़ें)। आप प्रेरणा के लिए इसे देख सकते हैं, हालांकि यह रूबी में लिखा नहीं गया है: https://github.com/ry/node_chat

+0

हाय .. रोगी होने के लिए धन्यवाद और आपके उत्तर के लिए भी धन्यवाद .. !! मुझे थोड़ी देर बाद एहसास हुआ कि मैं वास्तव में एक टीसीपी सर्वर लागू कर रहा था, न कि वेब सर्वर, इसलिए मैं वास्तव में वांछित चीज़ों को प्राप्त करने में सक्षम नहीं होता। – boddhisattva

+0

यही वह है जिसे मैं चैट एप्लिकेशन के रूप में बना सकता हूं: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva