2016-01-10 5 views
6

हे, मैं क्रॉस डोमेन के साथ socket.io का उपयोग करने की कोशिश कर रहा हूं। उदाहरण के लिए कहें डोमेन हैं: https://client.domain.com और https://server.domain.com। मेरे क्लाइंट पक्ष कोड इस तरह दिखता है:socket.io लगातार गलत पते पर मतदान का उपयोग करने की कोशिश करता रहता है

socket = io.connect("https://server.domain.com"); 
socket.on("connect", function() { 
    console.log("socketio Connected to server!"); 
}); 
socket.emit("test", {"test":"test"}); 

और सर्वर साइड:

var fs = require('fs'); 
var https = require('https'); 
var express = require('express'); 
var socketIO = require('socket.io'); 
var app = express(); 

// Settings 
var serverOptions = { 
    key: fs.readFileSync('privkey1.pem'), 
    cert: fs.readFileSync('cert1.pem') 
}; 

var serverPort = 443; 

// Logic 
var server = https.createServer(serverOptions, app); 
var io = socketIO(server); 

io.on('connection', function(socket) { 
    socket.on("test", function(data) { 
    console.log(data); 
    }); 
}); 

server.listen(serverPort, function() { 
    console.log('server up and running at %s port', serverPort); 
}); 

सब कुछ काम करता है, संदेशों आगे पीछे भेजा। लेकिन कुछ reasone socket.io मतदान और गलत डोमेन पर उपयोग करने की कोशिश करता रहता है। लगभग हर सेकेंड मैं इन अनुरोधों को देखता हूं:

Request URL:https://client.domain.com/socket.io/?EIO=3&transport=polling&t=1452418594321-145 
Request Method:GET 
Status Code:302 OK 

सॉकेट.ओ ऐसा क्यों कर रहा है और मैं इसे कैसे बंद कर सकता हूं?

संपादित करें: और अधिक दिलचस्प बात यह है कि यदि मैं सॉकेट.ओओ के साथ करने के लिए सभी कोड को टिप्पणी करता हूं और केवल <script src="https://server.domain.com/socket.io/socket.io.js"></script> में छोड़ देता हूं तो यह अभी भी इन HTTP अनुरोधों को पहले वर्णित करता रहता है।

EDIT2: सुनिश्चित नहीं है कि यह कोई फर्क नहीं पड़ता है लेकिन वास्तविकता में डोमेन एक डोमेन के सबडोमेन नहीं हैं। वे https://clientdomain.com और https://serverdomain.com हैं।

+1

आपका एचटीएमएल 'client.domain.com' से परोसा जा रहा है, है ना? – cviejo

+0

इसे दोहराना नहीं है। मुझे पहले 'io.connect'' कॉल करने से पहले मुझे कोई भी अनुरोध नहीं दिख रहा है .... – cviejo

+0

डीबग जानकारी '' DEBUG = socket.io * नोड myapp'' –

उत्तर

0

यदि आप nginx का उपयोग कर रहे हैं, तो मुझे लगता है कि आपकी समस्या इसे कॉन्फ़िगर करने के तरीके से आती है। के रूप में socket.io docs

में कहा गया है आप पूरी तरह से अपने location ब्लॉक में निम्नलिखित बातें की जरूरत है सुनिश्चित करें कि आप इन हेडर को ठीक से सेट किया गया:

location/{ 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $host; 

    ... 
} 

Socket.IO बहुत अच्छी तरह से संभाल CORS, इसलिए मुझे शक समस्या यहाँ निर्भर करता है ।

0

जो अनुरोध आप देख रहे हैं वह इसलिए है क्योंकि आप ग्राहक को https://client.domain.com से सेवा दे रहे हैं।

Request URL:https://client.domain.com/socket.io/?EIO=3&transport=polling&t=1452418594321-145 

सिर्फ ग्राहक इतना है कि यह कब वस्तु का उपयोग कर सकते socket.io के लिए फ़ाइलों को हो रही है। यह https://server.domain.com के कनेक्शन से संबंधित नहीं है क्योंकि यह socket.io फ़ाइलों का अनुरोध है जो https://client.domain.com से परोसा जा रहा है।

आपका कोड क्लाइंट को https://server.domain.com पर सॉकेट.io स्रोत फ़ाइलों का उपयोग करके कनेक्ट कर रहा है, इसे https://client.domain.com से https // server.domain.com के माध्यम से प्राप्त किया गया है। एक बार सर्वर से फाइलें प्राप्त हो जाने के बाद, उन्हें https://client.domain.com से इसके कनेक्शन के माध्यम से ग्राहक को सेवा दी जाती है।

अनिवार्य रूप से, अनुरोध केवल कोड का तरीका है कि यह क्लाइंट डोमेन से socket.io फ़ाइलों का अनुरोध कर रहा है, जो सर्वर डोमेन से उत्पन्न हुआ है लेकिन क्लाइंट डोमेन के माध्यम से वास्तविक क्लाइंट को भेजा गया है (क्लाइंट डोमेन नहीं)।

+0

यह सवाल का जवाब नहीं देता है।"लगभग हर सेकेंड मैं इन अनुरोधों को देखता हूं:" लगभग हर सेकेंड क्यों? – Mtz

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

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