【发布时间】:2015-09-13 18:49:25
【问题描述】:
我正在尝试为我正在构建的 web 应用配置 socket.io。
我已经用 npm 成功安装了依赖项。
这是在服务器端执行的 index.js。 (我所有的公用文件夹,包括 index.html,都位于 httpdocs 文件夹中)
var express = require("express");
var app = express();
var port = 8080;
app.get("/", function(req, res){
res.send("Hello world!");
});
app.use(express.static(__dirname + '/httpdocs'));
var io = require('socket.io').listen(app.listen(port));
当我转到http://localhost:8080 时,我可以看到“Hello world!”在浏览器中,当我转到 http://localhost:8080/socket.io/socket.io.js 时,它会显示 socket.io.js 文件,所以它似乎工作正常。
在客户端,我似乎无法在我的 index.html 中使用下面的行导入那个 socket.io.js
<script src="/socket.io/socket.io.js"></script>
它只是重定向到 404 页面并删除语法错误。
我认为这是因为我的 MAMP 使用端口 80 用于客户端的 Apache 服务器。该项目作为虚拟主机运行。
<VirtualHost *:80>
ServerAdmin *my email*
DocumentRoot "*document root*/httpdocs/"
ServerName project.local
ServerAlias *.project.local
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
将侦听器端口从 8080 更改为 80 并不能解决该问题。我想我必须同时使用两个不同的端口。
【问题讨论】:
-
奇怪的是
http://localhost:8080/socket.io/socket.io.js会显示 JS 文件,但网页中的<script src="/socket.io/socket.io.js"></script>不起作用。唯一可能的方法是,如果您拥有此脚本标记的网页不是来自http://localhost:8080。放置脚本标签的网页的 URL 是什么?如果您在同一主机上有两个服务器进程,它们将不得不监听不同的端口。 -
我正在使用的网页是“project.local”,MAMP 将 URL 处理为虚拟主机。当我转到localhost 或localhost:80 时,我还在浏览器中看到我的站点,但socket.io 导入失败。当我浏览 localhost:8080 时,我看到 de index.js 删除了“Hello World”消息
标签: apache sockets socket.io mamp