在节点js中构build可伸缩的tcp服务器
所以我不确定我的头衔是否是最准确的,但我试图给我最好的补偿。
我最近在面试中被问到这个问题(或多或less,因为我不记得完整的问题,这是我的头顶):
你需要制作一个简单的tcp服务器,可以通过puTTy(或其他任何客户端)访问。
一旦你进入,你需要写:
login<用户名>(无所谓用户名)。
一旦你login,你可以做3个操作:
showDevices – 将返回设备列表(目前我们有灯和空调) – 我们可以写模拟对象。 我们假设他们有一个数字ID。
切换<deviceId> <on | off> – 打开或closures设备。
SetValue <deviceId> <double> – 设置设备的范围值(空调温度)
重要的事:
分离 – 分离逻辑和通信层。 我们现在使用telenat服务器,但是我们希望将来可以切换到http服务器。 这个过程应该很容易。
可扩展性 – 我们目前有4个操作(login,showDevices,Switch,SetValue) – 编写服务器,以便其他程序员可以很容易地添加另一个操作。 代码应该是不言自明的
任务可以用任何语言书写。 我试图用C#编写,直到我被卡住,无法继续。 最近我更多地进入Node js,并决定再给这个…所以我问你们这个解决scheme一些有用的直接。
-
如何在通信和逻辑层之间最好地分离?
-
有什么样的devise模式,我应该实现添加命令更容易? (我看了一下命令devise模式,我不能想象这是否意味着这种情况)
-
任何能够让我走上正轨的东西(没有告诉我究竟该做什么)将不胜感激。
谢谢!
我真的很喜欢这个挑战,我可能不得不为了自己的技术采访而偷走它。 🙂
我认为(没有深入地写代码,因为你问我不要),我在Node中处理它的方式类似于commander.js
模块。
所以,一个处理套接字的模块,可能只是一个允许连接的server.js文件,然后需要公开可用命令的模块。
可用的命令只是(取决于你如何允许升级)给定目录中的所有模块(比如commander.js)或者是以某个关键字作为前缀的所有模块(就像grunt一样)。
如果您不想自己动手,可以使用require-directory
模块来请求目录中的所有文件,然后通过数组访问表示法访问每个命令。
让我知道如果这是太高的水平,但这是我在节点采取的一般方法。
在C#中它会更难一点,你需要依靠reflection来允许在运行时添加新的插件,否则使用DI容器在编译时查找它们。
- 密码保护REDIS与dependency injectionnodejs
- javascript:重构全局对象以require()模块
- Javascriptdependency injection和节点中的DIP:require vs构造函数注入
- 在node.js中使用全局variables进行dependency injection
- 如何创build一个可重用的Socket.IO模块
- 如何提供诸如数据库,logging器等依赖关系到底层库?
- 如何在Nodejs中进行有效的dependency injection?
- 有没有类似于angular度注射器的nodejs的任何dependency injection解决scheme?
- 这是在Node中做dependency injection的正确方法吗?