2015-01-15 8 views
13

इसलिए मैंने अपने सेल प्रोजेक्ट में सॉकेट.ओ को एकीकृत करने की कोशिश की। हालांकि मुझे sails.js वेबसाइट पर बहुत कम दस्तावेज मिला। मैं अपने सर्वर के दो ब्राउज़र के बीच चैट बनाने की कोशिश कर रहा हूं।socket.io चैट का उदाहरण - sails.js

ग्राहक में

मेरे पास है:

io.socket.get('/posts/testStream', function serverResponded (body, JWR) { 

    // JWR ==> "JSON WebSocket Response" 
    console.log('Sails responded with: ', body); 
    console.log('with headers: ', JWR.headers); 
    console.log('and with status code: ', JWR.statusCode); 

    io.socket.on('messege', function onServerSentEvent (msg) { 
     console.log(msg); 
    }); 

    // first argument `body` === `JWR.body` 
    // (just for convenience, and to maintain familiar usage, a la `JQuery.get()`) 
}); 

और यह है:/पदों/testStream:

testStream: function(req,res){ 

    res.view(); 
}, 

कैसे मैं ग्राहक के लिए डेटा प्रसारित कर सकते हैं और कैसे मैं वापस करने के लिए भेज सकते हैं messege सर्वर? यदि आप मुझे एक उदाहरण के साथ दिखा सकते हैं जो बहुत अच्छा होगा।

+0

अभी तक मैंने केवल यह पता लगाने की कोशिश की है कि मुझे क्या करना है। कोड की कुछ पंक्तियों को कॉपी करने की कोशिश की गई ताकि यह देखने के लिए कि क्या खुशी होगी लेकिन बहुत कम दस्तावेज़ होने के कारण कुछ भी दिलचस्प नहीं है। –

+0

क्या आपने [इन दस्तावेज़ों] को देखा [http://sailsjs.org/#/documentation/reference/websockets/sails.sockets)? – alex

+0

हां लेकिन मुझे समझ में नहीं आया कि socket.io का उपयोग कैसे करें, मुझे कोड कहां लिखना चाहिए। यह सिर्फ इतना स्पष्ट नहीं है कि यह होना चाहिए। –

उत्तर

5

पता नहीं है, अगर आपको इसकी ज़रूरत है। बस मामले में और मेरे अपने अभ्यास के लिए यहां उदाहरण काम कर रहा है।

मैंने शैलियों के लिए CSS framework Semantic-UI और Knockout.js चैट रेंडर के लिए उपयोग किया। इसके अलावा सभी प्रश्न sails.io.js द्वारा किए गए हैं। परीक्षण से पहले उन्हें संपत्ति फ़ोल्डर में रखें।

मॉडल API/मॉडल/Chat.js:

module.exports = { 

    attributes: { 
     id: { 
       type: 'integer', 
       primaryKey: true, 
       autoIncrement: true, 
       unique: true 
      }, 
     text: 'string' 
    } 
}; 

नियंत्रक API/नियंत्रक/ChatController.js:

module.exports = { 
    do: function(req, res){ 
     return res.view(); 
    } 
}; 

देखें विचारों/चैट/do.ejs:

<div class="ui very padded basic segment"> 
    <div class="ui feed" data-bind="foreach: { data: messages, as: 'message' }"> 
     <div class="event"> 
      <div class="content"> 
       <div class="summary"> 
        Message ID <span data-bind="text: message.id"></span> 
        <div class="date" data-bind="text: message.createdAt"></div> 
       </div> 
       <div class="extra text" data-bind="text: message.text"></div> 
      </div> 
     </div> 
    </div> 
</div> 
<div class="ui very padded basic segment"> 
    <form class="ui form" method="post" data-bind="submit: sendMessage"> 
     <label>Your message</label> 
     <div class="ui field"> 
      <input type="text" name="message" value="" data-bind="value: newMessage"/> 
     </div> 
     <button class="ui primary button">Send</button> 
    </form> 
</div> 
<script type="text/javascript"> 
var chatModel = function(){ 
    var self = this; 
    this.messages = ko.observableArray(); 
    this.newMessage = ko.observable(''); 
    this.errors = ko.observableArray(); 

    /** 
    * Send message to chat 
    * 
    * In fact, save to server and get show saved message in list 
    */ 
    this.sendMessage = function(form){ 
     var self = this; 
     if (self.newMessage().length > 0){ 
      io.socket.post('/chat', {text: self.newMessage()}, function(data, jwr){ 
       // If the message was created successfully, add it to messages array 
       if (jwr.statusCode == 201){ 
        self.messages.push(data); 
        self.newMessage(''); 
       } else { 
        self.errors.push('ERROR: ' + jwr.statusCode); 
       } 
      }); 
     } 
    }.bind(this); 

    /** 
    * Get last 100 messages and connect to Chat websockets 
    */ 
    io.socket.get('/chat', {sort: 'createdAt', limit: 100}, function(data, jwr){ 
     if (jwr.statusCode == 200){ 
      self.messages(data); 
     } else { 
      self.errors.push('ERROR: ' + jwr.statusCode); 
     } 
    }); 

    /* 
     When a new message created by other user, add it to messages array 
    */ 
    io.socket.on('chat', function(msg){ 
     if (msg.verb == 'created'){ 
      self.messages.push(msg.data); 
     } 
    }); 
}; 

ko.applyBindings(new chatModel()); 
</script> 

बस http://yoursite/chat/do खोलें और जादू =)

+0

इसलिए वास्तव में एक संदेश को उत्सर्जित करने के लिए आप 'io.socket.post (URI, JSON_MESSAGE, कॉलबैक) 'का उपयोग करते हैं? अगर मैं इसे अच्छी तरह समझता हूं, तो यह देनदार एक बक्षीस है, क्योंकि वास्तव में डॉक्टर मेरे जैसे नए लोगों के लिए पर्याप्त नहीं है। – zabumba

+0

इसके अलावा आप नियंत्रक में POST को कैसे संभालेंगे? – zabumba

+0

यदि आप सॉकेट का उपयोग करते हैं तो सेल स्वचालित रूप से सभी कनेक्टेड क्लाइंट्स को संदेश प्रसारित करता है। प्रेषक के अलावा। प्रेषक को परिवर्तन प्रसारित करने के लिए आपको कुछ और जादू करने की आवश्यकता है। मैं संदेश भेजने के बाद 'self.messages.push (डेटा) क्यों करता हूं। वास्तव में आपको नियंत्रक में 'POST' को संभालने के लिए कुछ और करने की आवश्यकता नहीं है, क्योंकि [ब्लूप्रिंट API] (http://sailsjs.org/documentation/reference/blueprint-api) सेल के सभी जादू करते हैं। लेकिन अपने आप पर नियंत्रक में 'POST' को संभालने के लिए आपको ** ChatController.js ** में अपने स्वयं के फ़ंक्शन' create', 'update',' नष्ट' लिखना होगा। – Bulkin