一尘不染

WebSocket / Socket.IO服务器的一个很好的解决方案(我尝试过Nginx,Node等)

node.js

我对设置Socket.IO服务器+ Rails
Web应用程序很感兴趣。但是,正如许多人所知,支持WebSocket的Web服务器并不多。到目前为止,这是我的两次尝试:

  1. 我尝试了Nginx模块路由。无法获得编译+配置的组合才能使此功能完全正常运行。我可能有些愚蠢。

http://www.letseehere.com/reverse-proxy-web-
sockets

  1. 我尝试使用node-http-proxy编写自己的Web服务器,但是尽管阅读了所有教程,但仍无法将其与Socket.IO完全集成。

http://github.com/nodejitsu/node-http-
proxy

  1. 我尝试使用bouncy.js编写自己的Web服务器,但速度非常慢。可能是我的代码,可能是框架。我不知道。

http://github.com/substack/bouncy

这些都是我尝试过的事情,我很好奇还有谁沿着这些路线走了,终于找到了可以解决的问题(当然,还有他们为使它起作用而做了些什么)。


阅读 205

收藏
2020-07-07

共1个答案

一尘不染

根据alessioalex的要求,这是我的配置文件。我删除了所有现有注释,但添加了一些我自己认为不重要的注释。

但是,描述此配置的所有部分的功能超出了本文的范围,但是您很可能可以在HAProxy网站上找到必要的文档。

global
    maxconn 4096 
    pidfile /var/run/haproxy.pid

defaults
    mode    http

frontend all
    bind 0.0.0.0:80
    mode tcp

    maxconn 200000
    timeout client 86400000
    default_backend www_backend

    # Any URL beginning with socket.io will be flagged as 'is_websocket'
    acl is_websocket path_beg /socket.io
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    # The connection to use if 'is_websocket' is flagged
    use_backend socket_backend_http if is_websocket

    tcp-request inspect-delay 500ms
    tcp-request content accept if HTTP

backend www_backend
    option httplog
    option httpclose
    balance roundrobin
    option forwardfor
    timeout server 30000
    timeout connect 4000
    server thin1 localhost:4001 weight 1 maxconn 1024 check
    server thin2 localhost:4002 weight 1 maxconn 1024 check
    server thin3 localhost:4003 weight 1 maxconn 1024 check

backend socket_backend_http
    mode http
    option httplog
    option http-server-close
    option forceclose
    no option httpclose
    balance roundrobin
    option forwardfor 
    timeout queue 5000
    timeout server 86400000
    timeout connect 86400000
    timeout check 1s
    server socket1 localhost:5001 weight 1 maxconn 1024 check
2020-07-07