node.js - 我可以在浏览器中启动 socket.io/websocket 服务器吗?

标签 node.js websocket socket.io webpack browserify

之前有人问过这个问题,答案是否定的。但是现在,有了 browserify/webpack,我可以像在服务器上那样编写代码吗?它会在浏览器中运行,还是有任何限制使这变得不可能?

最佳答案

不,你不能。在浏览器中启动服务器需要访问浏览器中根本不存在的低级功能。 Browserify 无法向浏览器添加基本的低级功能,因为浏览器不具备这些功能,因此需要额外的 native 代码支持才能正常工作。

Browserify 只能打包纯 Javascript 的代码,或者构建在浏览器中已存在的基础设施之上的代码,或者可以使用构建在浏览器中现有功能之上的一些纯 JavaScript 进行模拟的代码。

例如,您可以从 Node.js 获取一个纯 JavaScript 的加密哈希库,并且不依赖于浏览器中不存在的任何功能,并且您可以对其进行浏览器化(例如重新打包)来使用它在浏览器中。但是,您无法采用使用低级 UDP 通信的 Node.js 包,因为浏览器中不存在对 UDP 的底层访问。

一般来说,如果node.js代码执行I/O或操作其他进程或使用任何具有 native 代码的模块,它可能无法与browserify一起工作(对于某些文件I/O有一些解决方法)。

有关更多信息,请参阅:

Does Browserify have any limitations?

Browserify Compatibility


所以你不会说你想要解决的实际问题是什么,但通常你会在某处启动一个实际的服务器并让浏览器连接到该服务器。如果您希望某个特定的浏览器 session 看起来是“主”,那么您当然可以让您的客户端/服务器以这种方式运行。一个客户端可以是连接到同一服务器的其他客户端的主客户端(看起来本质上是服务器本身)。这一切都取决于您如何对服务器进行编程以及它如何与连接到它的各种客户端进行通信。实际服务器可以成为其他客户端的代理,客户端可以通过与实际服务器的代理连接来访问类似服务器的功能。

关于node.js - 我可以在浏览器中启动 socket.io/websocket 服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039634/

相关文章:

javascript - 复杂的 IF 语句问题

node.js - 将文件从 Node js 传输到 Dropbox,无需基于浏览器的 oauth 身份验证

node.js - 通过 Node JS 插入时,Mongo shell 不显示集合(命令 show collections)

node.js - 如何在nodejs中实现通知系统?

javascript - 为什么新列表仅在 react 中输入更改后才显示?

node.js - 错误 'Cannot apply $pull to a non-array value'

websocket - Socket.IO 客户端可以连接到 SignalR 服务器吗?

python - Django Channels - Websocket 连接失败

node.js - 从 LAN 内部和外部使用 socket.io

node.js - 如何使用 redis 适配器覆盖套接字的基本适配器?