【发布时间】:2019-03-23 21:33:11
【问题描述】:
我用 ReactJS 和 SocketIO 构建了一些程序,它作为一个完全可定制的工具来与 socketIO 服务器通信。
您可以注册要监听的事件、发送任何类型的消息、将配置对象传递给连接等。
现在我决定添加对本机 websocket 的支持。问题是,本机 Web 套接字更简单,并且没有实现与 SocketIO 相同的功能。
例如,我的 React 容器中有这个方法(我所有的主要逻辑都集中在其中,没有 Redux):
registerEventToSocket = (instanceId, socket, eventName) => {
socket.off(eventName);
socket.on(eventName, (...args) => {
const lastArg = args[args.length - 1];
const isFunction = this.isFunction(lastArg);
if (isFunction) {
lastArg();//If a callback was supplied from the server, it is invoked.
var index = args.indexOf(lastArg);
if (index > -1) {
args.splice(index, 1);
}
}
this.addMessageToState(instanceId, eventName, args, false)
})
}
当用户“添加一个事件”来监听时调用这个方法。在原生 websocket 的情况下,只有一个事件需要监听,即“onmessage”事件,所以这整个功能是无关紧要的。
应用程序会做一些对原生套接字无用的事情,例如“侦听所有传入事件”的选项。
我试图想出一些好的设计模式,我可以用它在这里创建一些多态性,以处理 SocketIO 情况和本机情况。
我熟悉“策略模式”,我经常使用它,但在我的情况下,这两个“策略”都会实现两个不同的接口,这将违反 SOLID 原则。
有什么建议吗?
【问题讨论】:
标签: reactjs design-patterns websocket socket.io