【问题标题】:Do I need multithreading for clients simultaneously receiving a message via a socket?我是否需要客户端同时通过套接字接收消息的多线程?
【发布时间】:2020-12-16 18:03:15
【问题描述】:

我有一个客户端 (Java) 和一个服务器 (NodeJS)。我想模拟更多的客户端使用更多的 Windows 命令行 (cmd) 相互通信。

每次客户端连接时,我都会将连接保存在一个数组中。当其中一个客户端类型“发送”时,我会通过一个循环向所有连接的客户端发送消息。但每次我这样做时,只有输入“发送”的客户端才会收到响应。一个简短的版本是这样的:

var net = require('net');
let clients = []

var server = net.createServer(function (connection) {
    connection.on('data', function (data) {

        clients.push(connection);
        let commandArray = data.toString().split(" ");

        if (commandArray[0] == "send") {
            for (i = 0; i < clients.length; i++) {
                console.log(clients[i].remotePort)
                clients[i].write("Hello!\n")
            }
        }
    }
}

我对多个客户的想法比对代码的任何更正更感兴趣(但如果那里确实有问题,请告诉我)。我的猜测是我需要使用更多线程,每个客户端一个,以执行此操作,否则在给定时刻只有一个可用于接收消息。我说的对吗?

【问题讨论】:

  • 每个连接使用一个线程是最简单的,但也可以像过去那样完全不踩踏地做到这一点。

标签: java node.js sockets


【解决方案1】:

在这种情况下使用的习惯架构是有一个作为“看门人”的线程,只需执行某种poll() 循环,然后将工作请求交给“稳定的(线程或处理)工人”通过某种队列。 (完成的工作项然后被推送到另一个队列,然后由相同或不同的线程处理。)

But Also(!)“这种情况如此完全司空见惯”,你需要确保你不是——Actum Ne Agas... – “做已经完成的事情。”无论您在哪种编程环境中工作,“必须是(!)'现有的框架或一些有用的管道!'”

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多