2

从昨天开始,我对 Node.JS 和 Socket.IO 完全陌生。

我尝试让 Node.JS 和 Socket.IO 在我的 Raspberry Pi 上工作,但似乎没有。我无法访问<myip>:1337/socket.io/socket.io.js 我已按照本教程进行操作,因此我的 Lighttpd.conf 文件如下所示:

$HTTP["host"] == "<myURLtomywebsite>" {
    proxy.server = (" " => ((
        "host" => "<myIP>",
        "port" => 1337)
    )
)

我的server.js样子是这样的:

var http = require('http');

httpServer = http.createServer(function(req, res) {
    res.end('Hello World!');
});

httpServer.listen(1337);

var io = require('socket.io').listen(httpServer);
var clients = 0;

io.sockets.on('connection', function(socket) {
    ++clients;

    socket.on('disconnect', function(data) {
        --clients;
        io.sockets.emit('disusr', clients);
    });

    io.sockets.emit('newusr', clients);
});

我绑定到 my 中的disusrandnewusr事件client.js以显示div.

我的一切看起来都很好,localhost但是在生产环境中,我无法链接到端口socket.io.js上的文件。1337老实说,我什至不确定要使用什么地址?(我的网站的 URL 附加了:1337, localhost,我会创建的其他地址吗?)

任何帮助将非常感激。谢谢!

4

1 回答 1

1

我解决了我的问题!

socket.io.js这样链接:<script type="text/javascript" src="/socket.io/socket.io.js"></script>

我使用 HAProxy 而不是这个问题中指定的 Lighttpd mod_proxy

这是我的 conf 文件(<...>根据您的配置进行修改):

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
  log  127.0.0.1  local0
  log  127.0.0.1  local1 notice
  maxconn  4096
  uid  99
  gid  99
  daemon

defaults
  log   global
  mode  http
  option  httplog
  option  dontlognull
  retries  3
  option http-use-proxy-header
  option  redispatch
  option  http-server-close
  maxconn  2000
  contimeout  5000
  clitimeout  50000
  srvtimeout  50000

frontend public
  bind *:80
  acl is_example hdr_end(host) -i <URL.toyourwebsite.com>
  acl is_websocket hdr(Upgrade) -i WebSocket
  acl is_websocket path_beg -i /websockets
  use_backend ws if is_websocket is_example
  default_backend www

backend ws
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout queue 5000
    timeout server 86400000
    timeout connect 86400000
    server apiserver localhost:<PORT> weight 1 maxconn 1024 check

我让 Lighttpd 监听 8080 端口(否则 HAProxy 不会启动)。

提醒无需使用 mod_proxy,因为已知它与 websockets 不兼容。请改用 HAProxy。

于 2014-03-25T14:01:32.260 回答