跨组件和存储使用的单个 websocket 连接

Posted

技术标签:

【中文标题】跨组件和存储使用的单个 websocket 连接【英文标题】:Single websocket connection to use across components and store 【发布时间】:2017-09-27 03:57:16 【问题描述】:

我有一个 mobx 存储,它存储来自服务器的所有数据。

//stores.js

class User 
    @observable userInfo = null;
    @observable webSocketConnected = false;


class Trend 
    @observable latest_trends = null;

我有一个组件可以输入用户输入并将其通过 websockets 发送到服务器。

@inject('UserStore') @observer
export default class Editor extends React.Component 
    componentDidMount() 
        socket = new WebSocket(newURL);
    

    sendText = () => 
        // socket.send(...) and update to the store
    

    render() 
        return (
            <View style=styles.container>
                ...
                <TextInput
                    value=this.state.text
                    ...
                    style=styles.text/>
            </View>
        )
    


我有另一个组件可以对用户的评论进行投票,我想通过 websockets 将其更新到服务器。

@inject('TrendStore') @observer
export default class Editor extends React.Component 
    updateComment = () => 
        // socket.send(...)
    

    render() 
        return (
            <TouchableOpacity onPress=this.updateComment>
                <Icon/>
            </TouchableOpacity>
        )
    

如何创建一个 WebSocket 连接,以便我可以将它与我的所有商店和组件一起使用?

【问题讨论】:

【参考方案1】:

您将创建一个 websocket 服务类,该服务类将传递给每个需要访问 websocket 的商店的构造函数。在程序的主文件中,您初始化所有存储并将它们提供给组件。

const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores =  userStore, trendStore ;
...
<Provider ...stores >
   ...
</Provider>

WebSocketService 可以有类似的方法

发送(消息)

registerEventListener(事件,监听器)

因此,您为每个商店提供了相同的 websocketService 实例。

提示:不要在组件中编写发送逻辑或任何其他业务登录。像 sendMessage(message) 将一个方法添加到特定的商店,然后从你的组件中调用这个方法。

希望这能回答你的问题。

【讨论】:

以上是关于跨组件和存储使用的单个 websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

websocket 可以跨域吗

使用 WebSockets 跨多个网页进行实时提要?

springboot2.1.3整合websocket和websocket-security支持跨域连接

在单个应用程序中打开多个 websocket 连接

跨两个不同域的单个API存储?

从 websocket 更新数据时闪烁或闪烁文本