gpt4 book ai didi

javascript - node js中的Web套接字服务器继承链

转载 作者:行者123 更新时间:2023-11-29 23:16:13 25 4
gpt4 key购买 nike

我正在尝试在我的 node.js 平台中实现服务器层次结构。我喜欢保持可塑性,并希望保持我的基本服务器类足够开放,以基于 TCP、UDP 或 Web 套接字(或与此相关的任何其他内容)。

理想的层次结构应该是这样的

WebSocketChatServer 扩展 ChatServer 扩展服务器

WebSocketGameServer 扩展 GameServer 扩展服务器

WebSocketMatchmakingServer 扩展 MatchmakingServer 扩展服务器

意思是我也可以做

TcpChatServer 扩展 ChatServer 扩展服务器

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

服务器

  • 管理通用客户端
  • 可以路由传入命令
  • 不监听任何端口,因为它不知道它的 UDP、TCP、websocket 等

聊天服务器

  • 管理通用 ChatClient
  • 创建默认聊天 channel (例如“General Chat”)

WebSocketChatServer

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

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

ChatWebSocketServer 扩展 WebSocketServer 扩展服务器

GameWebSocketServer 扩展 WebSocketServer 扩展服务器

MatchmakingWebSocketServer 扩展 WebSocketServer 扩展服务器

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

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

最佳答案

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

然后,您将为 TCP、WebSockets 等实现接口(interface),将这些接口(interface)完全保留为将具体通信方法映射到抽象通信接口(interface)的细节。

关于javascript - node js中的Web套接字服务器继承链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com