4

我在 Node.js 和 socket.io 方面都没有太多经验,因此也许我会问一些愚蠢的问题并为此感到抱歉。

我正在尝试执行以下操作:

  1. 在我还安装了 apache 的 ubuntu 上安装了节点。
  2. 在 apache 中创建虚拟主机并将其设置为节点的代理。我的 conf 文件如下所示:

    <VirtualHost *:80>
        ServerAdmin giorgi@omedia.ge
        ServerName node.aidemo.info
        ServerAlias www.node.aidemo.info
    
        ProxyRequests off
        <Proxy *>
           Order deny,allow
           Allow from all
        </Proxy>
    
        <Location />
           ProxyPass http://127.0.0.1:8080
           ProxyPassReverse http://127.0.0.1:8080
        </Location>
    
    </VirtualHost>
    
  3. 为服务器创建了简单的 js 文件(socket.io 网站中的第一个服务器示例)并使用命令从 cli 启动服务器:node server.js。完美启动,听8080

  4. 创建了另一个虚拟主机,我在其中放置了客户端 index.html(也来自 socket.io 中的第一个示例)。起初我有问题(实际上主要问题是这个),浏览器无法解析路径/socket.io/socket.io.js。然后我从终端本地从 lynx 转到 url (http://localhost:8080/socket.io/socket.io.js),下载该 js 并使用 index.html 附近的虚拟主机本地放置。在此之后,浏览器可以解析该请求,但是当 socket.io.js 本身尝试获取 url 时出现错误:

    http://localhost:8080/socket.io/1/?t=1347623348836
    

你有什么想法我该如何解决这个问题?我的主要目标是拥有一个 web url,我可以从中访问我的节点服务器并使用 socket.io 与之交谈——例如创建非常简单的聊天。

我希望我很清楚。感谢所有愿意提供帮助的人。

4

3 回答 3

5

我正在使用 express + socket.io,他们正在监听 port 3001。我想http://example.com/folder重定向到我的 Express 应用程序侦听端口3001(即 to http://localhost:3001server-side)。

我做了以下事情。

.html 文件有这个:

<script src='/folder/socket.io/socket.io.js'> </script>  
<script>  
var socket = io.connect('http://example.com', {resource: 'folder/socket.io'});  
...  
</script>  

我的 apache2 conf 看起来像这样:

ProxyPreserveHost On
ProxyPass /folder/ http://localhost:3001/
ProxyPassReverse /folder/ http://localhost:3001/

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

<Location /folder/>
    allow from all
</Location>

请注意,它需要proxy_http启用该模块。要启用它,请运行以下命令:

sudo a2enmod proxy_http; service apache2 restart
于 2013-04-02T18:36:07.807 回答
1

如果您将socket.io.js文件本地放在文件附近index.html,它不会解决问题,因为您可能没有更改文件中socketvar 中的 url,请main.js查看:

var socket = io.connect();

在你的main.js/index.html(脚本)

用。。。来代替:

var socket = io.connect(httpprotocol+hostname+httpport);

我的代码源如下所示:

var socket = io.connect('https://192.168.43.187:8443/');
于 2016-10-15T09:02:10.037 回答
0

http://localhost:8080显然您的服务器之外的任何东西都无法使用。

客户端 javascriptio.connect()应该连接到,http://node.aidemo.info以便 apache 可以将其发送到 Node.js。

http://node.aidemo.info:8080如果您打开了端口 8080,也可能会起作用。

于 2012-10-25T20:55:23.453 回答