【问题标题】:Web socket server inheritance chain in node js节点js中的Web套接字服务器继承链
【发布时间】:2018-10-08 01:52:57
【问题描述】:

我正在尝试在我的 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

现在,为什么我不能这样做?

服务器

  • 管理通用Clients
  • 可以路由传入的命令
  • 不侦听任何端口,因为它不知道其是否为 UDP、TCP、websocket 等

聊天服务器

  • 管理通用ChatClients
  • 创建默认聊天频道(例如“普通聊天”)

WebSocketChatServer

  • 在某个端口上监听wswss
  • 创建新客户端并监听网络套接字事件
  • 启动所需的 http/https 服务器
  • 设置ssl

所以问题就在这里。我所有的实际 websocket 处理都是在顶层。这意味着WebSocketGameServerWebSocketWhateverServer 需要将所有方法复制粘贴到其中。更合适的方法是

ChatWebSocketServer extends WebSocketServer extends Server

GameWebSocketServer extends WebSocketServer extends Server

MatchmakingWebSocketServer extends WebSocketServer extends Server

现在所有这三个WebSocketServer 类型都具有所有必需的 websocket 逻辑。但是,现在我已经失去了ChatServerGameServer 等的通用性。

我能做些什么来保持ChatServerGameServer 和任何其他Server 通用,然后将它们实现到WebSocketServers 中而不复制所有Web 套接字侦听器和处理程序?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    为通信层定义一个抽象接口,让它成为Server层次结构中的类使用而不是它们的东西(聚合/组合而不是比继承)。您甚至可以将其注入Server 构造函数(依赖注入的一种形式),这可能便于测试。

    然后,您将实现 TCP、WebSockets 等的接口,只保留将具体通信方法映射到抽象通信接口的细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-30
      • 2017-02-04
      • 2019-08-27
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      相关资源
      最近更新 更多