नवीनतम क्रोम ब्राउज़र के साथ लटकता है, मैं sockjs
क्लाइंट का उपयोग बैकएंड सर्वर के साथ संवाद करने के लिए कर रहा हूं जो haproxy
के पीछे है। मेरे लोकहोस्ट पर (बीच में haproxy
के बिना), यह ठीक काम कर रहा है - क्लाइंट websocket
प्रोटोकॉल का उपयोग कर संदेश भेज, भेज और प्राप्त कर सकता है। उदाहरण के लिए:वेबस्केट हैंडशेक हैप्रोक्सी
conn.onopen = function() {
if (conn.readyState === SockJS.OPEN) {
conn.send("hello server");
console.log("msg sent");
}
};
एक बार मैं HAProxy
साथ सर्वर पर तैनात, अजीब बात होता sockjs
सोचता है कि (conn.readyState === SockJS.OPEN
में और के रूप में 'भेजा संदेश' कंसोल लॉग में दिखाई देता है), तथापि, websocket
हाथ मिलाना कनेक्शन खुला बस लटकता है और संदेश सर्वर द्वारा कभी प्राप्त नहीं होता है।
Oct 23 09:08:25 localhost.localdomain haproxy[14121]: 129.xx.xxx.105:55000 [23/Oct/2012:09:08:24.459] public www/content 777/0/0/1/778 200 375 - - ---- 3/3/0/1/0 0/0 "GET /sockjs/info HTTP/1.1"
Oct 23 09:10:54 localhost.localdomain haproxy[14121]: 129.xx.xxx.105:55015 [23/Oct/2012:09:08:25.398] public www/content 0/0/0/1/149017 101 147 - - CD-- 4/4/0/0/0 0/0 "GET /sockjs/478/kyi342s8/websocket HTTP/1.1"
सूचना है कि दूसरी लॉग संदेश केवल प्रकट होता है जब मैं बंद haproxy
पीछे बैकएंड सर्वर: नीचे क्या मैं haproxy
लॉग में देखते हैं। शट डाउन से पहले, लॉग में कोई त्रुटि नहीं है लेकिन वेबस्केट हैंडशेक पूरा नहीं होता है और सर्वर द्वारा कोई संदेश प्राप्त नहीं होता है।
Chrome के डेवलपर टूल का उपयोग करके नेटवर्क टैब में, मैं निम्न देखें:
Request URL:ws://www.mysite.com/sockjs/478/kyi342s8/websocket
Request Method:GET
Status Code:101 Switching Protocols
Request Headers
Connection:Upgrade
Host:www.mysite.com
Origin:http://www.mysite.com
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:TFEIKYhlqWWBZKlXzXAuWQ==
Sec-WebSocket-Version:13
Upgrade:websocket
(Key3):00:00:00:00:00:00:00:00
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:D+s3va02KH6QTso24ywcdxcfDgM=
Upgrade:websocket
(Challenge Response):00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
और दोनों के नेटवर्क टैब के अंतर्गत websocket
वस्तु शो 'लंबित' की 'प्रकार' और 'समय विलंबता' डेवलपर उपकरण।
global
log 127.0.0.1 local1 info
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 500
timeout connect 6s
frontend public
mode http
bind *:80
timeout client 300s
option http-server-close
#option http-pretend-keepalive
# define ACLs
acl host_static hdr_beg(host) -i static. data.
acl host_www hdr_beg(host) -i www.
acl url_static path_end .ico .txt .pdf .png .jpg .css .js .csv
acl is_stats path_beg /haproxy/stats
# define rules
use_backend nginx if host_static or host_www url_static
use_backend stats if is_stats
default_backend www
backend nginx
timeout server 20s
server nginx 127.0.0.1:8484
backend stats
stats enable
stats uri /haproxy/stats
backend www
timeout server 300s
option forwardfor
#no option httpclose
option http-server-close
server sockcontent 127.0.0.1:8080
क्या किसी को पता है कि क्यों यह हो रहा है:
अंत में, यह मेरा haproxy
config (संस्करण 1.4.22) क्या है? क्या यह haproxy
कॉन्फ़िगरेशन, या यहां तक कि सर्वर की कुछ सामान्य नेटवर्क सेटिंग्स (उदा। iptables
) के कारण है?
पीएस मैंने http-pretend-keepalive
को haproxy
में सक्षम करने का प्रयास किया है, लेकिन यह काम नहीं करता है।