React +Socket.io实现 网络实时推送消息

安装 socket.io

npm install -save socket.io

封装 socket,io 客户端

/**

  • webSocket客户端工厂,目的在于使用facade模式封装关于webSocket的操作

  • 不涉及任何业务处理。

  • 实现方案:定义WebSocket类,该类具备发送消息和监听消息能力

*/


export default class WebSocketClient {

constructor(uri ='/', {

path ='/',

forceNew =true,

transports = ['polling','websocket'],

autoConnect =false,

} = {}

){

this.client = io(uri,{path, forceNew,transports,autoConnect});

}

connect(){

this.client.open();

}

disconnect(){

this.client.close();

}

receive(eventName,callback){

this.client.on(eventName,(data) => callback(transJson(data)));

}

send(eventName,data){

this.client.emit(eventName,data);

}

}

/**

* 将后台传过来的json字符串转换为object

* @param data

* @param callback

*/

function transJson(data){

let trans = data;

if(typeof data ==='string' && (data.indexOf('{') ===0 || data.indexOf('[') ===0)){

trans =JSON.parse(data);

}

return trans;

}```

引入WebSocketClient 

import WebSocketClient from "../../utils/WebSocketClient";

利用react钩子函数实现实时刷新

componentDidMount() { this.connectWebSocket()}

componentWillReceiveProps(){ this.initWebSocket() }

componentWillUnmount() { this.closeWebSocket() }

connectWebSocket=()=>{

if(!window.webSocketClient)

{ window.webSocketClient = new WebSocketClient('ws://${‘服务器地址’}',{path:'/path'}); }

const {webSocketClient} = window; webSocketClient.connect();

webSocketClient.send('event','123');

]

initWebSocket=()=>{

if(!window.webSocketClient)

{ window.webSocketClient =  new WebSocketClient('ws://${‘服务器地址’}',{path:'/path'}); }

const {webSocketClient} = window; webSocketClient.receive('

Message',(data) =>{ this.setState({ socketData:data, }) });

}

closeWebSocket =()>{

 const {webSocketClient} = window;

if(webSocketClient){ webSocketClient.disconnect();}

}    



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在项目中用到socket.io在WEB端做消息推送,遂花了点时间看了socket.io实现,做个简单分析,如有错漏...
    __七把刀__阅读 30,048评论 20 54
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,040评论 3 119
  • 在朋友圈看遍了世界各地的油菜花之后,我还是没有拒绝大将要带我看油菜花的邀请。大将是个少女心满满的女孩。虽然我实在不...
    花子huahua阅读 10,080评论 47 97
  • 1、房子进入逐步装饰中,每个月添一些喜欢的东东进去,慢慢的有了样子,很高兴,也很有成就感和满足感。 2、虽然买贵点...
    陌白Carl阅读 1,170评论 0 0