0
这是一个使用socket.io进行与服务器的所有通信的前端项目。这允许推送,但我们被要求提供一个暂停按钮。如果用户不希望自动执行该操作,则暂停按钮用于停止在UI上更改数据。消息传递类和全局状态
我们有一个包装web-socket的类,它提供了socket.io的最小包装。
问题是,我们不能只关闭套接字。用户交互需要继续工作,并且不同的视图对于需要忽略的消息具有不同的规格。
最终它是一个大的全球布尔。我宁可不要这确实是一个全局变量,所以这里的想法到目前为止我有:
全球
// A non pausable listener
socket.on('myEvent', function(data){
// do thing
});
// A pausable listener
socket.on('myPausable', function(data){
if(window.isPaused){ return false; }
// do thing
});
传递的值
// A non pausable listener
socket.on('myEvent', function(data){
// do thing
});
// A pausable listener
socket.on('myPausable', function(data, isPaused){
if(isPaused){ return false; }
// do thing
});
裹法
// A non pausable listener
socket.on('myEvent', function(data){
// do thing
});
// A pausable listener
socket.onLive('myPausable', function(data){
// do thing
});
分层次
// A non pausable listener
socket.on('myEvent', function(data){
// do thing
});
// A pausable listener
liveData.on('myPausable', function(data){
// do thing
});
目前有消息发生在插座的了很多,而且只会是一个“PAUSE '在用户界面上切换,所以这需要小心完成。建议和最佳实践表示赞赏。
我最初发布这个在“程序员” https://softwareengineering.stackexchange.com/questions/231524/messaging-class-and-global-state
+1帮助。问题是有一堆代码已经在使用套接字监听器,将所有代码移动到一个新模块似乎是不可行的。 – Fresheyeball
UI模块与现有套接字代码完全分离。它只是一个全局单例,其他代码可以委派UI任务。 – levi
我在下面添加的听众用于演示目的。作为“UI”模块可以全局访问,其他代码可以保留在现在的任何位置。 – levi