【问题标题】:Building scalable tcp server in node js在 node js 中构建可扩展的 tcp 服务器
【发布时间】:2016-05-10 22:44:45
【问题描述】:

所以我不确定我的标题是否最准确,但我尽量给出最好的解释。

我最近在一次工作面试中被问到这个问题(或多或少,因为我不记得完整的问题。这是我的头顶):

您需要创建一个简单的 tcp 服务器,可以通过 puTTy(或任何其他客户端)访问。

进入后,你需要写:

登录(不管是什么用户名)。

登录后,您可以进行 3 项操作:

  • showDevices - 将返回设备列表(目前我们有台灯和空调) - 我们可以编写模拟对象。假设他们有一个数字 ID。

  • Switch - 设置设备开启或关闭。

  • SetValue - 设置设备的范围值(空调温度)

重要的事情:

  • 分离 - 分离逻辑层和通信层。我们现在使用 Telenat 服务器,但将来我们希望切换到 http 服务器。这个过程应该很简单。

  • 可扩展性 - 我们目前有 4 个操作(登录、showDevices、Switch、SetValue) - 编写服务器以便其他程序员可以很容易地添加另一个操作。代码应该是不言自明的

作业可以用任何语言编写。我尝试用 C# 编写它,直到我被卡住并且无法继续。最近我更喜欢 Node js,并决定再试一次......所以我向你们寻求一些有用的指导来解决这个问题。

  • 如何最好地将通信层和逻辑层分开?

  • 我应该实施某种设计模式来更轻松地添加命令吗? (我查看了命令设计模式,但无法确定它是否适用于这种情况)

  • 任何能够真正引导我走上正轨的事情(不告诉我具体要做什么)都会受到赞赏。

谢谢!

【问题讨论】:

    标签: node.js design-patterns tcp dependency-injection


    【解决方案1】:

    我真的很喜欢这个挑战,我可能不得不为了我自己的技术面试而偷走它。 :)

    我认为(因为您要求我不要深入编写代码,所以没有深入编写代码),我在 Node 中处理它的方式类似于 commander.js 模块。

    所以,一个处理套接字内容的模块,可能只是一个允许连接的 server.js 文件,然后需要公开可用命令的模块。

    可用的命令只是(取决于您希望允许升级的方式)给定目录中的所有模块(如 command.js 所做的)或以某个关键字为前缀的所有模块(如 grunt 所做的)。

    如果您不想自己执行此操作,可以使用 require-directory 模块请求目录中的所有文件,然后通过数组访问表示法访问每个命令。

    让我知道这是否太高级了,但这是我在 Node.js 中采用的一般方法。

    在 C# 中会有点困难,您需要依靠反射来允许在运行时添加新插件,或者使用 DI 容器在编译时找到它们。

    【讨论】:

    • 直到现在我才知道 command.js。看来它可以轻而易举地解决我的问题!我会更多地研究它(虽然我对在我的解决方案中使用 command.js 是招聘人员希望我做的事情持怀疑态度,也许深入研究模块的实施可以帮助我完成我需要的一切)
    • 取决于谁在招聘。我可以告诉你,当我采访人们时,我给那些都选择使用合适的 3rd 方库的人打分最多,以及谁能解释该库的作用、使用它的风险等。
    • 我会在一两天内试一试。如果您的答案实际上太高,我可能需要进一步的帮助。在这种情况下,一些代码会很有帮助:)
    猜你喜欢
    • 2011-05-06
    • 2011-11-01
    • 2011-02-03
    • 2015-03-01
    • 2011-06-20
    • 2010-10-26
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多