Socket.IO客户端的.js文件位于哪里?

36

我正在尝试让socket.io(Node.js库)工作。

我的服务端js正在运行并监听。socket.io的官网简单地说明:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

很不错,但是我导入了哪个JS文件呢!?!

我进入了node_modules目录,在那里通过npm安装了socket.io,在socket.io/lib/内有一个socket.io.js文件。但是,这是服务器端的(使用require()短语,在客户端会出错)。

我花了一个小时左右的时间四处查找,但却无法使任何客户端.js文件工作。

我错过了什么吗?

4个回答

45

我最终成功地找到了答案。

Socket.io的入门页面没有明确说明这一点,但我发现socket.io的服务器端在启动node时会自动托管.js文件,目录在文档中指定:

"/socket.io/socket.io.js"

所以你只需要指向这个网址,而不用考虑你的Web应用程序的结构,它就能工作。


26
这是由节点服务器动态生成的文件。我也觉得奇怪,他们竟然没有提到这一点,好像希望每个人都盲目地复制他们的示例,而不去质疑里面发生了什么。 - Mahn
那么当它不起作用时,我们该怎么办?我在这里,在 S/O 上寻找答案...(但仍然没有找到)。我讨厌魔法。 - jleach
1
只有在运行socket-io服务器端的进程与处理路由/提供HTML/JS的进程相同时,此方法才有效。否则,您必须指定URL:端口,例如http://localhost:3466/socket.io/socket.io.js。也就是说(显然),如果您有一个Web应用程序尝试引用不同的进程,则需要指定整个URL。 - Don Cheadle
@jleach 试试这些中的一个。 - OrangeDog

4

我建议检查一下你的node_modules目录是否位于应用程序目录的顶层。另外,我相信你需要指定一个端口号;你应该写类似于var socket = io.connect('http://localhost:1337');这样的代码,其中端口号为1337


值得一提的是,如果您打算使用相同的协议、主机和端口来使用套接字,则可以完全放弃对'code'connect'code'的调用和URL,而是使用var socket = io();。这将为您创建处理程序以供将来使用并尝试连接。 - Alex

3
如果您执行了npm install,则客户端socket.io文件位于node_modules/socket.io-client/dist/socket.io.js。
来源:Socket get-started page

3
这就是为什么stackoverflow不公平。他们封锁了我提问的权限。这个回答很有用,但却被评为-1。我给了它一个赞,所以现在是0分。 - Thanasis

2
客户端有几种可用方式:
  • 由socket.io服务器提供,位于/socket.io/socket.io.js
  • 作为模块socket.io-client通过webpack引入
  • 通过官方CDNhttps://cdnjs.cloudflare.com/ajax/libs/socket.io/<version>/socket.io.js
对于第一种方式,服务器可以通过以下几种方式进行配置:
// standalone
var io = require('socket.io')(port);

// with existing server from e.g. http.createServer or app.listen
var io = require('socket.io')(server);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接