【问题标题】:Flask-SocketIO: Passing events between nodes (Redis-Adapter)Flask-SocketIO:在节点之间传递事件(Redis-Adapter)
【发布时间】:2020-09-27 02:26:20
【问题描述】:

当在节点平衡器后面运行的应用程序中使用SocketIO 时,官方文档说明了在这些节点之间传递事件的方式(使用SocketIO-Redis):

const io = require('socket.io')(3000);
const redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

但是,当使用Flask-SocketIO(或不使用Node.js)时,SocketIO 的 JavaScript(独立)版本将像这样使用:

<script src="socket.io.js"></script>
<script>
    var socket = io();
</script>

当使用SocketIO-JS-standalone 版本时,如何实现Redis-Adapter?有没有类似的东西可以不用Node.js

我尝试使用BrowserifySocketIO-Redis 转换为JavaScript,但socket.adapter()io.adapter() 都没有函数。无论如何,文件太大了。

【问题讨论】:

  • 也许我不明白你在问什么,但似乎你将 JS 服务器和 JS 客户端视为同一事物,但事实并非如此。您问题中的第一个代码示例使用 JS/Node Socket.IO 服务器。第二个示例使用 JS Socket.IO 客户端。没有“独立”版本的 Socket.IO。

标签: javascript node.js redis socket.io flask-socketio


【解决方案1】:

在使用 SocketIO-JS-standalone 版本时如何实现 Redis-Adapter?

我不知道你为什么在这里使用“独立”。我想你的意思是 JavaScript Socket.IO 客户端,它与 Redis 没有任何关系,无论你使用什么 Socket.IO 服务器。

Redis 支持由服务器实现。对于 Node Socket.IO 服务器,您使用 Redis-Adapter 项目。对于 Python Socket.IO 服务器,内置了对 Redis 的支持,您只需在创建服务器对象时添加 message_queue 参数,如 the docs 所示。

【讨论】:

  • 我仔细检查了文档,显然有问题。我想指出这个 Redis-Adapter 没有 Python 版本,因为我假设每个节点都有自己的 message_queue,我需要在它们之间传递事件。原来我有我需要的一切。感谢您的澄清。
  • “独立”一词被 socket.io/docs/client-api 误读。
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 2022-01-03
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
相关资源
最近更新 更多