我正在尝试在我的node.js平台中实现服务器的层次结构。我喜欢保持可伸缩性,并希望保持我的基本服务器类足够开放以基于TCP或UDP或基于Web套接字(或与此有关的任何其他内容)。
理想的层次结构看起来像
WebSocketChatServer extends ChatServer extends Server
WebSocketGameServer extends GameServer extends Server
WebSocketMatchmakingServer extends MatchmakingServer extends Server
意思是我也可以
TcpChatServer extends ChatServer extends Server
现在,为什么我不能这样做?
服务器
Client
小号聊天服务器
ChatClient
小号WebSocket聊天服务器
ws
或wss
在某个端口上因此,问题就出在这里。我所有实际的websocket处理都是在顶层进行的。这意味着WebSocketGameServer
并且WebSocketWhateverServer
将需要所有复制粘贴到其中的方法。一个更合适的方法是
ChatWebSocketServer extends WebSocketServer extends Server
GameWebSocketServer extends WebSocketServer extends Server
MatchmakingWebSocketServer extends WebSocketServer extends Server
现在,所有这WebSocketServer
三种类型都具有所有必需的websocket逻辑。但现在我已经失去的一般性词语ChatServer
,GameServer
等等。
我该怎么做才能保留ChatServer
,GameServer
和任何其他Server
泛型,然后将它们实现为,WebSocketServer
而无需复制所有Web套接字侦听器和处理程序?
定义一个用于通信层的抽象接口,并使其成为Server
层次结构中的类使用的东西,而不是它们所使用的东西(聚合/组成而不是继承)。您甚至可以将其注入到Server
构造函数中(一种形式的依赖注入),这可能对于测试很方便。
然后,您将实现TCP,WebSockets等的接口,仅将这些接口保留在将具体通信方法映射到抽象通信接口的细节上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句