我已经用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原则。
有什么建议吗?