2

我知道已经有很多关于此的问题,但没有人为我回答,而且我的略有不同。

我正在使用以下命令在节点中启动 socket.io 服务器:

var io = require('socket.io').listen(8000);

我的终端说一切正常:

info  - socket.io started

现在我正在尝试使用此 url 在我的客户端浏览器中加载 .js 文件:

http://<hostname>:8000/socket.io/socket.io.js

我没有得到 404,它只是永远挂起。我还使用网络实用程序 ping 端口 8000,它似乎打开得很好。

我昨天刚刚安装了node和socket.io,所以它们应该是最新版本。任何人都可以对此有所了解吗?谢谢!

4

4 回答 4

2

原来我永远无法请求 .js 文件的原因是因为我的公司网络阻止了除常用端口(80、21 等)之外的所有端口,所以`我永远无法与端口 8000 通信。

于 2013-03-02T15:00:18.253 回答
1

使用 express.js。将socket.io文件放在public/javascripts文件夹中并将此行添加到您的 html

<script src="/javascripts/socket.io.js"></script>

我认为这是最好的方法。当您编写http://<hostname>:8000/socket.io/socket.io.js
节点时,尝试socket.io在项目的公用文件夹中找到一个名为的文件夹。以及里面的文件socket.io.js

如果您不想使用 express.js,您应该捕获请求并尝试加载文件,如果没有为您的请求找到路由(实际上是 express 执行的操作),因为节点不知道如何处理不执行的请求t 匹配服务器中的任何路由。

我建议使用该socket.io.min.js文件(它更小并且在文件夹中node_modules\socket.io\node_modules\socket.io-client\dist

于 2013-03-01T15:21:50.167 回答
1

您必须启动 http/https 服务器才能通过 http/https 访问它。简单地启动一个 socket.io 服务器是行不通的。请执行下列操作:

var http = require('http');
var  app = http.createServer(),
io = require('socket.io').listen(app);
app.listen(7000, "0.0.0.0");

然后我可以访问该文件http://localhost:7000/socket.io/socket.io.js

sockets.io 使用 websocket 协议 (ws://)。请参阅维基百科页面

于 2013-03-01T15:48:36.663 回答
1

您需要至少 3 件一起工作。

  1. 提供一些 HTML(/index.html 就可以了),这样就有了一个网页。此文件应包含 socket.io 客户端<script>标记。为此,您需要入门示例的 http 服务器部分。你错过了这个,这就是为什么浏览到你的服务器会挂起。

  2. 服务于 socket.io 客户端。当您将 http 服务器函数传递给 Socket.io 时,Socket.io 会自动为您执行此操作。您不需要完整的表达,因为这可以根据socket.io文档http上的第一个示例仅使用节点的模块来完成。

  3. 一些 javascript 实际对套接字做一些事情。这可以是<script>标签中的内容index.html或单独的文件。如果它是一个单独的文件,您需要设置您的 http 服务器来实际提供它。

于 2013-03-01T16:04:32.077 回答