12

मैंने socket.io का उपयोग करके अपना पहला node.js ऐप बनाया। विशेष रूप से मैंने socket.io द्वारा प्रकाशित chat example को लागू किया। यह पूरी तरह से स्थानीय रूप से काम करता है। और फिर मैंने इसे Google App Engine पर तैनात करने की कोशिश की (नोड को काम करने के लिए कुछ कोड tweaks बनाते हैं)।मैं Google App Engine में socket.io को कैसे तैनात करूं?

सबकुछ दिखाता है कि नोड हिस्सा अच्छी तरह से काम कर रहा है। हालांकि चैट यह काम नहीं करती है कि socket.io हिस्सा काम नहीं कर रहा है। आप तैनात ऐप (और पृष्ठ स्रोत) here देख सकते हैं।

क्या मुझे कुछ अतिरिक्त करना है? यामल या जेसन फाइलों में कुछ?

YAML सामग्री:

runtime: nodejs 
vm: true 

skip_files: 
    - ^(.*/)?.*/node_modules/.*$ 

json सामग्री:

{ 
    "name": "Chaty", 
    "description": "chatrooms app", 
    "version": "0.0.1", 
    "private": true, 
    "license": "Apache Version 2.0", 
    "author": "McChatface", 
    "engines": { 
    "node": "~4.2" 
    }, 
    "scripts": { 
    "start": "node app.js", 
    "monitor": "nodemon app.js", 
    "deploy": "gcloud preview app deploy" 
    }, 
    "dependencies": { 
    "express": "^4.13.4", 
    "socket.io": "^1.4.6" 
    } 
} 

उत्तर

4

गूगल WebSockets here का उपयोग कर एक उदाहरण एप्लिकेशन है, तो आप इसे सही ढंग से काम करने के लिए निम्नलिखित कार्य करने होंगे:

  • सर्वर के लिए फ़ायरवॉल पोर्ट खोलें ताकि ग्राहक आपके सर्वर तक पहुंच सकें
  • Google ऐप इंजन में अपना आंतरिक आईपी प्राप्त करें, इसलिए ग्राहक जानते हैं कि
  • से कनेक्ट करने के लिए आईपी क्या है, अपने सर्वर से अपने आईपी को बाकी की तरह गूंजें एपीआई या एक एचटीएमएल पेज

यह होना चाहिए (इसके लिए मेरा शब्द न लें, यह वही है जो मैं दस्तावेज़ों पर कुछ शोध करने के बाद पता लगाने में सक्षम हूं), उम्मीद है कि इससे मदद मिलती है!

Google अनुप्रयोग इंजन

var METADATA_NETWORK_INTERFACE_URL = 'http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip'; 

function getExternalIp (cb) { 
    var options = { 
     url: METADATA_NETWORK_INTERFACE_URL, 
     headers: { 
      'Metadata-Flavor': 'Google' 
     } 
    }; 

    request(options, function (err, resp, body) { 
     if (err || resp.statusCode !== 200) { 
      console.log('Error while talking to metadata server, assuming localhost'); 
      return cb('localhost'); 
     } 

     return cb(body); 
    }); 
} 

के भीतर से अपने बाहरी IP लाई जा रही है फ़ायरवॉल पोर्ट

gcloud compute firewall-rules create default-allow-websockets \ 
    --allow tcp:65080 \ 
    --target-tags websocket \ 
    --description "Allow websocket traffic on port 65080" 
+1

मुझे लगता है कि मैं करीब हूं, लेकिन इसे अभी तक काम करने के लिए नहीं मिला है। मैंने फ़ायरवॉल बंदरगाह खोला और Google websocket प्रोजेक्ट को तैनात किया। वह काम किया। लेकिन मुझे अभी तक पता नहीं है कि इसे socket.io के साथ कैसे काम करना है। चूंकि socket.io 8080 में सर्वर और एक्सप्रेस का उपयोग कर सर्वर का उपयोग कर उपयोग कर रहा है। // सर्वर var सर्वर = app.listen (process.env.PORT || '8080', '0.0.0.0', फ़ंक्शन() { console.log ('Ctrl + C को छोड़ने के लिए दबाएं।' प्रारंभ करें।); }); var io = आवश्यकता ('socket.io') (सर्वर); –

+0

नमूना ऐप का लिंक टूटा हुआ है; यह एक करीब आ रहा है: https://github.com/GoogleCloudPlatform/appengine-websocketchat-java –

6

खुलने इस संक्षेप में प्रस्तुत करने पर नहीं किया जा सकता है और यह work in process प्रतीत होता है। सही आर्किटेक्चर Google कंप्यूट इंजन पर एक चैट सर्वर है जैसा कि here रूपरेखा है।

लेकिन Google ऐप इंजन पर socket.io का उपयोग करने के लिए अवधारणा के प्रमाण के रूप में google appengine samples for websockets में दिखाया गया है।

सॉकेट.io के मामले में सर्वर पक्ष पर निम्न चरणों का पालन करें। नीचे कोड स्निपेट।

  1. दूसरा एक्सप्रेस मिडलवेयर और सर्वर बनाएं।
  2. नए सर्वर के साथ socket.io संलग्न/उपयोग करें।
  3. पोर्ट (65080) को सुनो।
  4. Google कंप्यूट इंजन पर पोर्ट (65080) के लिए फ़ायरवॉल खोलें।
  5. working repository से लिंक करें।

सॉकेट।सर्वर साइड पर कब परिवर्तन

var app_chat = require('express')(); 
    var server1 = require('http').Server(app_chat); 
    var io = require('socket.io')(server1); 
    server1.listen(65080); 

    io.on('connection', function (socket) { 
     console.log('user connected'); 
     socket.on('chat_message', function (data) { 
     console.log('client sent:',data); 
     socket.emit('chat_message', 'Server is echoing your message: ' + data); 
     }); 
    }); 

आदेश से खुला फ़ायरवॉल

gcloud compute firewall-rules create default-allow-websockets \ 
    --allow tcp:65080 \ 
    --target-tags websocket \ 
    --description "Allow websocket traffic on port 65080" 

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

+0

Google के नमूना ऐप का लिंक टूटा हुआ है; यह एक करीब आ रहा है: https://github.com/GoogleCloudPlatform/appengine-websocketchat-java –