当前位置: 首页 > 知识库问答 >
问题:

区分多个Websocket

欧阳飞
2023-03-14

我正在使用一个库(ShareDB)进行操作转换,服务器端和客户端使用web套接字-json-流进行通信。然而,这个ShareDB是在nodejs上作为服务运行的(我使用Zorpc来控制我的节点进程),因为我的主要Web框架是Tornado(python)。我从这个线程中了解到,对于TCP等有状态协议,连接是由客户端端口区分的(因此只需要一个服务器端口)。根据这个关于web套接字如何处理多个传入请求的响应,tcp和web套接字之间的底层传输通道没有区别。

所以我的问题是,如果我创建一个从客户端到 python 服务器的 websocket,然后从客户端到我的 nodejs 代码(ShareDB 服务),服务器如何区分哪个套接字与哪个套接字?服务器是否负责在给定时间内只有一个套接字“侦听”连接(即首先与 Python 服务器建立通信,然后开始侦听第二个 websocket?

共有1个答案

令狐宜民
2023-03-14

在同一个物理服务器机器上运行两个服务器进程的最简单的方法是让每个进程监听不同的端口,然后客户端连接到该服务器上的适当端口,以指示它正在尝试连接哪个服务器。

如果由于服务器环境的原因,您只能有一个传入端口,那么您可以使用类似代理的东西。您仍然有两台服务器监听不同的端口,但是没有一台监听对外界开放的端口。代理监听对外界开放的一个传入端口,然后基于传入连接的一些特征,代理将该传入连接定向到适当的服务器进程。

可以配置代理来识别您试图通过URL或DNS主机名连接到哪个进程。

 类似资料:
  • 问题内容: 我有一个MS Access数据库,我将需要创建一个SQL查询,该查询使我可以在保留所有值的同时,在一列中选择所有不同的条目。 在这种情况下,一个例子比以往任何时候都更有价值数千个单词: 表: SQL魔术 结果: 基本上,它删除列B的所有唯一值,但保留数据的多行。我可以“按b分组”,然后“计数> 1”以得到不同的字符,但是结果将只列出B的一行,而不是我需要的2或更多行。 有什么帮助吗?

  • 在调试和故障处理的时候,我们通常有必要知道 RDD 有多少个分区。这里有几个方法可以找到这些信息: 使用 UI 查看在分区上执行的任务数 当 stage 执行的时候,你可以在 Spark UI 上看到这个 stage 上的分区数。 下面的例子中的简单任务在 4 个分区上创建了共 100 个元素的 RDD ,然后在这些元素被收集到 driver 之前分发一个 map 任务: scala> val s

  • 假设4个节点拆分在2个数据中心(DC1-1、DC1-2、DC2-1、DC2-2)上。 使用分区组和默认备份计数1,留档和其他问题/文章非常清楚数据是如何分布的,假设分布良好的数据-每个节点25%为主数据,DC1-1/DC1-2中的所有主数据都将备份在DC2-1/DC2-2上,反之亦然。 如果我们将备份计数增加到2,则不清楚在相同的情况下预期的行为是什么。假设条目#1当前为DC1-1上的主条目。备份

  • 我有一个将消息写入主题/分区的生产者。为了保持顺序,我希望使用单个分区,我希望12个使用者读取来自这个分区的所有消息(没有使用者组,所有消息都应该发送给所有使用者)。这是可以实现的吗?我读过一些论坛,每个分区只有一个用户可以阅读。

  • 问题内容: 有没有比以下更有效的方法: 问题答案: 在查询中使用PARTITION(partitionN)语法应该非常少见。 通常,您只想为分区键指定值,并允许Oracle执行分区消除。例如,如果您的表每天根据TRANSACTION_DATE进行分区 将从今天的分区,昨天的分区和前一天的分区中选择所有数据。

  • 我已经在c中创建了kafka消费者,并创建了一个具有10个分区的主题,当我尝试使用消费者读取数据时,它仅从2个分区读取,然后说没有更多的消息。我尝试使用这两种方法,即订阅和分配,但它们都不起作用。我应该如何将所有10个分区分配给单个使用者,这是将分区分配给使用者的正确方法吗?我已经使用此存储库构建了自定义消费者 https://github.com/edenhill/librdkafka/blob