socket.io客户端库在哪里?

76
据我所见,如果不使用node.js作为Web服务器,目前没有关于在何处定位socket.io客户端脚本的解释。我找到了一个完整的客户端文件目录,但需要它们结合成一个版本(就像在使用node.js Web服务器时提供的一样)。有什么想法吗?
8个回答

172

我发现实现这个的最佳方式是使用bower

bower install socket.io-client --save

在您的应用程序HTML中添加以下内容:

<script src="/bower_components/socket.io-client/socket.io.js"></script>

这样,您就可以像对待任何其他受管理的软件包一样对待客户端的socket.io部分。


5
这是最佳解决方案,谢谢!如果对其他人有帮助的话,minified socket.io客户端位于 bower_components/socket.io-client/dist/socket.io.min.js - mikermcneil
5
Bower 赢了。 <script src="bower_components/socket.io-client/socket.io.js"></script>。(说明:Bower 是一种用于 Web 开发的软件包管理器,socket.io 是一个 JavaScript 库,提供实时、双向和基于事件的通信功能。上述代码片段是在 HTML 文件中引入 socket.io 客户端库的方式之一。) - Connor Leech
这个库已经被成功安装了,但据我所知它缺少一个 bower.json 文件。我的 gulp 步骤会自动合并 bower 库('main-bower-files'),但它没有将其引入。 - Dave Ceddia
我检查了 bower info socket.io-client,看起来它在 bower 中没有注册 bower.json(因此默认在 bower 存储库中创建了一个)。你可以 fork 该项目,创建一个 bower.json,并注册自己的 bower 版本。创建一个包含 bower.json 的 pull request。创建一个问题并查看是否有贡献者可以创建它。 - Matt Way
干得好,伙计们。有了这个答案,只用几秒钟就可以运行起来了。 - Anthony
显示剩余3条评论

68

socket.io.js 就是你需要在客户端 HTML 中添加的内容,类似于:

<script type="text/javascript" src="socket.io.js"></script>

我的脚本位于:

/usr/local/lib/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js

将那个文件复制到您希望服务器提供服务的位置。


4
太棒了,谢谢。在那个目录结构混乱的文件夹中我找不到那个文件 :) - Braun Shedd
4
是的,这并不太合乎逻辑。许多使用socket.io的人都会问到这个问题。祝一切顺利 :-) - EhevuTov
4
谢谢!很奇怪的是文档或示例中没有关于此的信息。 - Peter
2
https://github.com/LearnBoost/Socket.IO/wiki/How-do-I-serve-the-client<script src="http://<uri:port>/socket.io/socket.io.js"></script> - Dmitry
请不要这样做,使用以下解决方案。 - Dmitry
1
@dVaffection 只有当 Web 应用程序和 Socket.io 在同一服务器和端口上时才能正常工作。 - Jo David

25

我认为更好、更适当的方式是从这个URL加载它。

src="/socket.io/socket.io.js" 

在运行Socket.io的域上。这种解决方案的积极之处在于,如果您更新了socket.io npm模块,则客户端文件也会得到更新,无需手动每次复制。


1
这是我个人认为最好的答案。这是来自Socket.IO文档的客户端包含的推荐用法。它只是解释了它的来源,以及@Capaj提到的优点。 - Fernando Piancastelli
15
只有当Node.js提供网站服务时,这才是最佳解决方案。但这是一个非常大的“如果”。 - Jo David

8

我按照Matt Way的建议使用了bower,效果很好,但是库本身没有自己的文件。

这意味着我使用的bower-main-files Gulp插件无法引入socket.io依赖的JS文件,导致页面加载时出现错误。在我的项目的bower.json中添加一个override解决了这个问题。

首先使用bower安装库:

bower install socket.io-client --save

然后将覆盖添加到您项目的bower.json中:
"overrides": {
  "socket.io-client": {
    "main": ["socket.io.js"]
  }
}

6
对于每个运行wiredep并遇到“socket.io-client was not injected in your file.”错误的人:
请像这样修改您的wiredep任务:
wiredep: {
  ..
  main: {
    ..
    overrides: {
      'socket.io-client': {
        main: 'socket.io.js'
      }
    }
  }

@k-d 这样解决了问题,但为什么?socket.io-client 默认情况下缺少了什么? - Nitzan
因为他们不想支持 Bower。 - K. D.

2
我已经创建了一个兼容Bower的socket.io-client,您可以像这样安装它:

bower install sio-client --save

或者用于开发使用:
bower install sio-client --save-dev

链接到代码库


你们会发布更新吗?socketio现在已经更新到1.3.5了。你们的版本由于某些原因非常缓慢和笨重。 - if __name__ is None
也许有一种自动更新 bower 客户端版本的方法? - Diogyn

2
如果您正在使用bower.json,请添加 socket.io-client 依赖项。
"socket.io-client": "0.9.x"

然后运行bower install来下载socket.io-client。

接着在你的HTML中添加脚本标签。

<script src="bower_components/socket.io-client/dist/socket.io.min.js"></script>

0
如果您使用https://github.com/btford/angular-socket-io,请确保您的index.html文件如下所示:
<!-- https://raw.githubusercontent.com/socketio/socket.io-client/master/socket.io.js -->
<script src="socket.io.js"></script>

<!-- build:js({client,node_modules}) app/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<!-- ...... -->
<script src="bower_components/angular-socket-io/socket.js"></script>
<!-- endbower -->
<!-- endbuild -->



<script type="text/javascript" charset="utf-8">
   angular.module('myapp', [
// ...    
'btford.socket-io'
]);

// do your angular/socket stuff
</script>

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