2012-03-28 15 views
87

तो, मैं हाल ही में सॉकेट.ओ को समझने की कोशिश कर रहा हूं, लेकिन मैं एक सुपरर्ज्रेट प्रोग्रामर नहीं हूं, और लगभग हर उदाहरण मैं वेब पर पा सकता हूं (मेरा मानना ​​है कि मैंने घंटों और घंटों की तलाश की है), इसमें अतिरिक्त चीजें हैं जो जटिल हैं बातें। बहुत से उदाहरण उन चीज़ों का एक समूह करते हैं जो मुझे भ्रमित करते हैं, या कुछ अजीब डेटाबेस से कनेक्ट होते हैं, या कॉफ़ीस्क्रिप्ट या जेएस पुस्तकालयों के टन का उपयोग करते हैं जो चीजों को अव्यवस्थित करते हैं।सबसे सरल संभव सॉकेट.ओ उदाहरण का उदाहरण क्या है?

मुझे एक बुनियादी, कामकाजी उदाहरण देखना अच्छा लगेगा जहां सर्वर हर 10 सेकंड में क्लाइंट को एक संदेश भेजता है, यह कहता है कि यह कितना समय है, और ग्राहक पृष्ठ पर डेटा लिखता है या एक चेतावनी फेंकता है, कुछ बहुत आसान है। फिर मैं वहां से चीज़ों को समझ सकता हूं, मुझे सामानों की तरह ज़रूरत है, जैसे डीबी कनेक्शन आदि। और हाँ मैंने सॉकेट.ओ साइट पर उदाहरणों की जांच की है और वे मेरे लिए काम नहीं करते हैं, और मुझे समझ में नहीं आता कि वे क्या करते हैं ।

+4

पहले उदाहरण के साथ क्या गलत है (http://socket.io/#how-to-use)? मेरे लिए काफी सरल लगता है ... – maerics

+0

हाय, थोड़ा देर हो चुकी है लेकिन भविष्य में कोई भी नोडजेस के साथ सॉकेटियो का उपयोग करने में यहां एक अच्छा ट्यूटोरियल ढूंढ सकता है। http: // programmerblog।नेट/उपयोग-सॉकेटियो-साथ-नोडजेस/ –

उत्तर

131

संपादित करें: मुझे लगता है कि किसी भी व्यक्ति को सॉकेट.आईओ पर उत्कृष्ट chat example पर परामर्श करना बेहतर है। एपीआई काफी सरल है क्योंकि मैंने यह उत्तर प्रदान किया है। ऐसा कहा जा रहा है, यहां नवीनतम उत्तर दिया गया है जो नए एपीआई के लिए छोटे-छोटे अपडेट किए गए हैं।

index.html

<!doctype html> 
<html> 
    <head> 
     <script src='/socket.io/socket.io.js'></script> 
     <script> 
      var socket = io(); 

      socket.on('welcome', function(data) { 
       addMessage(data.message); 

       // Respond with a message including this clients' id sent from the server 
       socket.emit('i am client', {data: 'foo!', id: data.id}); 
      }); 
      socket.on('time', function(data) { 
       addMessage(data.time); 
      }); 
      socket.on('error', console.error.bind(console)); 
      socket.on('message', console.log.bind(console)); 

      function addMessage(message) { 
       var text = document.createTextNode(message), 
        el = document.createElement('li'), 
        messages = document.getElementById('messages'); 

       el.appendChild(text); 
       messages.appendChild(el); 
      } 
     </script> 
    </head> 
    <body> 
     <ul id='messages'></ul> 
    </body> 
</html> 

app.js

var http = require('http'), 
    fs = require('fs'), 
    // NEVER use a Sync function except at start-up! 
    index = fs.readFileSync(__dirname + '/index.html'); 

// Send index.html to all requests 
var app = http.createServer(function(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end(index); 
}); 

// Socket.io server listens to our app 
var io = require('socket.io').listen(app); 

// Send current time to all connected clients 
function sendTime() { 
    io.emit('time', { time: new Date().toJSON() }); 
} 

// Send current time every 10 secs 
setInterval(sendTime, 10000); 

// Emit welcome message on connection 
io.on('connection', function(socket) { 
    // Use socket to communicate with this particular client only, sending it it's own id 
    socket.emit('welcome', { message: 'Welcome!', id: socket.id }); 

    socket.on('i am client', console.log); 
}); 

app.listen(3000); 
+0

धन्यवाद एक टन, यह निश्चित रूप से काम करता है, और सबसे महत्वपूर्ण बात यह है कि मुझे यह समझना शुरू हो रहा है कि यह कैसे काम करता है। आप इसे लिखने के लिए बहुत दयालु हैं, मैंने ईमानदारी से काम करने के लिए कम से कम 3 या 4 घंटे खर्च किए हैं, जैसा कि हाहा है। बहुत बहुत धन्यवाद लिनस! – Cocorico

+0

यह मेरे लिए काम नहीं करता है। ब्राउज़र में मुझे एक खाली पृष्ठ मिलता है। सर्वर पक्ष पर "क्लाइंट अधिकृत" और "हैंडशेक अधिकृत" को छोड़कर कोई आउटपुट नहीं है। – Boris

+1

@ बोरीस आपको उस समस्या का सामना करना पड़ सकता है यदि आपने index.html फ़ाइल स्थानीय खोला है। यदि आपने किया है, तो src = "http: // के साथ स्क्रिप्ट टैग को प्रतिस्थापित करें। यदि आप किसी वेब सर्वर पर होस्टिंग कर रहे हैं तो जावास्क्रिप्ट कंसोल खोलें और विफल होने की पहचान करने का प्रयास करें। – CodeMonkeyKing

16

हो सकता है कि यह आप के रूप में अच्छी मदद मिल सकती है:

सिर्फ इसलिए कि मैं अच्छा आज लग रहा है। सॉकेट.ओ ने काम करने के तरीके के बारे में मुझे अपने सिर को लपेटने में कुछ परेशानी हो रही थी, इसलिए मैंने जितना संभव हो उतना उदाहरण उबालने की कोशिश की। http://socket.io/get-started/chat/

सबसे पहले, एक खाली निर्देशिका में प्रारंभ करें, और एक बहुत ही सरल उस में निम्नलिखित कहा जाता package.json प्लेस फ़ाइल बनाने:

मैं उदाहरण यहां पोस्ट से इस उदाहरण अनुकूलित।

{ 
"dependencies": {} 
} 

इसके बाद, कमांड लाइन पर, उपयोग NPM निर्भरता हम इस उदाहरण के लिए की जरूरत है स्थापित करने के लिए

$ npm install --save express socket.io 

यह अपने नेटवर्क कनेक्शन/सीपीयू/आदि की गति के आधार में कुछ मिनट लग सकते हैं यह जांचने के लिए कि सबकुछ योजनाबद्ध है, आप package.json फ़ाइल को फिर से देख सकते हैं।

$ cat package.json 
{ 
    "dependencies": { 
    "express": "~4.9.8", 
    "socket.io": "~1.1.0" 
    } 
} 

एक फ़ाइल server.js यह स्पष्ट रूप से हमारे सर्वर नोड द्वारा चलाया जाएगा बुलाया बनाएँ। निम्नलिखित कोड यह में रखें:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 

    //send the index.html file for all requests 
    res.sendFile(__dirname + '/index.html'); 

}); 

http.listen(3001, function(){ 

    console.log('listening on *:3001'); 

}); 

//for testing, we're just going to send data to the client every second 
setInterval(function() { 

    /* 
    our message we want to send to the client: in this case it's just a random 
    number that we generate on the server 
    */ 
    var msg = Math.random(); 
    io.emit('message', msg); 
    console.log (msg); 

}, 1000); 

बुलाया पिछले फ़ाइल index.html बनाएँ और इसे में निम्नलिखित कोड रखना होगा।

<html> 
<head></head> 

<body> 
    <div id="message"></div> 

    <script src="/socket.io/socket.io.js"></script> 
    <script> 
    var socket = io(); 

    socket.on('message', function(msg){ 
     console.log(msg); 
     document.getElementById("message").innerHTML = msg; 
    }); 
    </script> 
</body> 
</html> 

अब आप इस बहुत ही सरल उदाहरण का परीक्षण करने और कुछ उत्पादन निम्न के समान देख सकते हैं:

$ node server.js 
listening on *:3001 
0.9575486415997148 
0.7801907607354224 
0.665313188219443 
0.8101786421611905 
0.890920243691653 

यदि आप एक वेब ब्राउज़र को खोलने, और होस्टनाम आप चला रहे हैं करने के लिए यह बात नोड प्रक्रिया पर, आपको उसी ब्राउज़र को देखकर किसी भी अन्य कनेक्टेड ब्राउज़र के साथ, अपने ब्राउज़र में समान संख्याएं दिखाई देनी चाहिए।

18

यहां मेरा सबमिशन है!

यदि आप इस कोड को hello.js नामक फ़ाइल में डालते हैं और इसे node hello.js का उपयोग करके चलाते हैं तो इसे संदेश हैलो प्रिंट करना चाहिए, इसे 2 सॉकेट के माध्यम से भेजा गया है।

कोड दिखाता है कि क्लाइंट से // मिरर लेबल वाले कोड के अनुभाग के माध्यम से सर्वर से सर्वर पर बाउंस किए गए हेल्लो संदेश के चर को कैसे संभाला जाए।

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

// Server 
 
var io1 = require('socket.io').listen(8321); 
 

 
io1.on('connection', function(socket1) { 
 
    socket1.on('bar', function(msg1) { 
 
    console.log(msg1); 
 
    }); 
 
}); 
 

 
// Mirror 
 
var ioIn = require('socket.io').listen(8123); 
 
var ioOut = require('socket.io-client'); 
 
var socketOut = ioOut.connect('http://localhost:8321'); 
 

 

 
ioIn.on('connection', function(socketIn) { 
 
    socketIn.on('foo', function(msg) { 
 
    socketOut.emit('bar', msg); 
 
    }); 
 
}); 
 

 
// Client 
 
var io2 = require('socket.io-client'); 
 
var socket2 = io2.connect('http://localhost:8123'); 
 

 
var msg2 = "hello"; 
 
socket2.emit('foo', msg2);

7

मैं एहसास इस पोस्ट अब कई साल पुराना है, लेकिन कभी कभी प्रमाणित newbies के अपने आप को एक काम कर उदाहरण है कि है पूरी तरह से पूर्ण सबसे सरलतम रूप के लिए नीचे छीन जरूरत है जैसे।

प्रत्येक सरल सॉकेट। उदाहरण के लिए मैं http.createServer() शामिल कर सकता था। लेकिन क्या होगा यदि आप किसी मौजूदा वेबपृष्ठ में socket.io जादू का थोड़ा सा शामिल करना चाहते हैं? यहां पर सबसे आसान और सबसे छोटा उदाहरण है जिसके साथ मैं आ सकता हूं।

यह कंसोल UPPERCASED से पारित एक स्ट्रिंग देता है।

app.js

var http = require('http'); 

var app = http.createServer(function(req, res) { 
     console.log('createServer'); 
}); 
app.listen(3000); 

var io = require('socket.io').listen(app); 


io.on('connection', function(socket) { 
    io.emit('Server 2 Client Message', 'Welcome!'); 

    socket.on('Client 2 Server Message', function(message)  { 
     console.log(message); 
     io.emit('Server 2 Client Message', message.toUpperCase());  //upcase it 
    }); 

}); 

index.html:

<!doctype html> 
<html> 
    <head> 
     <script type='text/javascript' src='http://localhost:3000/socket.io/socket.io.js'></script> 
     <script type='text/javascript'> 
       var socket = io.connect(':3000'); 
       // optionally use io('http://localhost:3000'); 
       // but make *SURE* it matches the jScript src 
       socket.on ('Server 2 Client Message', 
        function(messageFromServer)  { 
         console.log ('server said: ' + messageFromServer); 
        }); 

     </script> 
    </head> 
    <body> 
     <h5>Worlds smallest Socket.io example to uppercase strings</h5> 
     <p> 
     <a href='#' onClick="javascript:socket.emit('Client 2 Server Message', 'return UPPERCASED in the console');">return UPPERCASED in the console</a> 
       <br /> 
       socket.emit('Client 2 Server Message', 'try cut/paste this command in your console!'); 
     </p> 
    </body> 
</html> 

को चलाने के लिए: इस port test तरह

npm init; // accept defaults 
npm install socket.io http --save ; 
node app.js & 

उपयोग कुछ सुनिश्चित करने के लिए अपने बंदरगाह खुला है।

अब http://localhost/index.html पर ब्राउज़ करें और सर्वर पर संदेश भेजने के लिए अपने ब्राउज़र कंसोल का उपयोग करें।

सर्वोत्तम अनुमान, पर

जब http.createServer का उपयोग कर, यह आप के लिए निम्नांकित दो पंक्तियों को बदल देता है:

<script type='text/javascript' src='/socket.io/socket.io.js'></script> 
var socket = io(); 

मैं आशा है कि यह बहुत ही सरल उदाहरण मेरे साथी newbies के कुछ संघर्ष पुर्जों। और कृपया ध्यान दें कि मैं अपनी सॉकेट परिभाषाओं के लिए उपयोगकर्ता द्वारा परिभाषित चर नामों को "आरक्षित शब्द" का उपयोग करने से दूर रहा हूं।

+1

' प्रत्येक सरल सॉकेट। उदाहरण के लिए मैं http.createServer() शामिल कर सकता हूं। लेकिन यदि आप किसी मौजूदा वेबपृष्ठ में mocket yes का एक छोटा सा सॉफ़्टवेयर शामिल करना चाहते हैं तो 'mhm yes ...' var app = http.createServer ('- वाट – mmcrae

संबंधित मुद्दे