如何让socket.io运行一个子目录

时间:2014-09-17 16:54:36

标签: socket.io subdirectory socket.io-1.0

我有一个代理运行只能点击我的node.js服务器以获取/mysubdir的路径 如何为这种情况配置socket.io?

在我的客户端代码中,我尝试了:

var socket = io.connect('http://www.example.com/mysubdir');

但后来我注意到底层的socket.io(或engine.io)http请求正在点击

http://www.example.com/socket.io/?EIO=3&transport=polling&t=1410972713498-72`

我希望他们点击

http://www.example.com/mysubdir/socket.io.....

我是否需要在客户端和服务器上配置?

4 个答案:

答案 0 :(得分:16)

在我的服务器中我必须

var io = require('socket.io')(httpServer, {path: '/mysubdir/socket.io'})`

在我的客户中,我不得不

<script src="http://www.example.com/mysubdir/socket.io/socket.io.js"></script>

以及

var socket = io.connect('http://www.example.com', {path: "/mysubdir/socket.io"});`

答案 1 :(得分:2)

在我的情况下,我使用nginx作为反向代理。轮询时我收到404错误。这是我的解决方案。

节点服务器的网址是https://example.com/subdir/

在app.js中,我用

实例化了io服务器
var io = require('socket.io')(http, {path: '/subdir/socket.io'});

在我使用的html中

socket = io.connect('https://example.com/subdir/', {
    path: "/subdir"
});

干杯,
路加。

答案 2 :(得分:1)

@Drew-LeSueur的答案对于socket.io&gt; = 1.0来说是正确的。

当我使用socket.io 0.9时,我在文档中找到了the old way of doing it

// in 0.9
var socket = io.connect('localhost:3000', {
  'resource': 'path/to/socket.io';
});

// in 1.0
var socket = io.connect('localhost:3000', {
  'path': '/path/to/socket.io';
});

请注意,/显示为新path选项中的第一个字符。

答案 3 :(得分:0)

使用nginx,此解决方案无需更改socket.io服务器应用中的任何内容:

在nginx conf中:

location /mysubdir {
   rewrite ^/mysubdir/(.*) /socket.io/$1 break;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_http_version 1.1;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $host;
   proxy_pass http://127.0.1.1:3000;
}

在服务器中:

var io = require('socket.io')(3000)

在客户端中:

var socket = io.connect('https://example.com/', {
    path: "/mysubdir"
})