相关疑难解决方法(0)

有多种方法可以让多个进程共享监听套接字?

在套接字编程中,您创建一个侦听套接字,然后对于每个连接的客户端,您将获得一个可用于处理客户端请求的普通流套接字.OS管理幕后传入连接的队列.

两个进程无法同时绑定到同一个端口 - 默认情况下,无论如何.

我想知道是否有一种方法(在任何着名的操作系统,特别是Windows上)启动进程的多个实例,这样它们都绑定到套接字,因此它们有效地共享队列.然后每个流程实例可以是单线程的; 它会在接受新连接时阻止.当客户端连接时,其中一个空闲流程实例将接受该客户端.

这将允许每个进程具有非常简单的单线程实现,除非通过显式共享内存,否则不会共享任何内容,并且用户将能够通过启动更多实例来调整处理带宽.

这样的功能是否存在?

编辑:对于那些问"为什么不使用线程?"的人 显然线程是一种选择.但是在单个进程中有多个线程,所有对象都是可共享的,并且必须非常小心以确保对象不是共享的,或者一次只对一个线程可见,或者是绝对不可变的,以及最流行的语言和运行时缺乏对管理这种复杂性的内置支持.

通过启动一些相同的工作进程,您将获得一个默认不共享的并发系统,从而使构建正确且可伸缩的实现变得更加容易.

sockets concurrency

86
推荐指数
5
解决办法
7万
查看次数

节点集群有多个进程监听同一个端口

我在阅读有关 Node js 中的集群的内容时遇到了一个简单的示例,而主文件创建了四个子进程,每个进程都监听 8080 端口。

代码运行良好,但我不明白:

如何让多个子进程监听同一个端口?

我期待收到这样的消息

错误:监听 EADDRINUSE:地址已在使用中 :::8080

const cluster = require("cluster");

if (cluster.isMaster) {
  for (let i = 0; i <= 4; i++) cluster.fork();
} else {
  require("./test.js");
}
Run Code Online (Sandbox Code Playgroud)

测试.js

const http1 = require("http");
http1
  .createServer((req, res) => {
    console.log("request1");
    res.write("hello1");
    res.end();
  })
  .listen(8080, () => {
    console.log("begin");
  });
Run Code Online (Sandbox Code Playgroud)

node.js node-cluster

3
推荐指数
1
解决办法
1617
查看次数

标签 统计

concurrency ×1

node-cluster ×1

node.js ×1

sockets ×1