socket.io 工具

socket.io和ajax 区别

socket 是基于 websocket  协议的,真正意义上的双向平等对话;WebSocket 协议本质上是一个基于 TCP 的协议。

前后端通过事件进行通信,前后端 都可以发起请求;

ajax  是基于 http 协议的,服务端被动接受浏览器端的请求。实时获取数据 只能轮询。


安装socket.io  服务端

cnpm i socket.io --save

安装socket.io  客户端

cnpm i socket.io-client --save


在server.js 里使 express 和 io关联起来

const app=express();
// 首先拿到 http 对象里的server对象把app封装一层
const server=require("http").Server(app);
// 然后 使用socket.io对象 再把这个对象调用一下 ,这样 整个express就和socket.io关联起来了
const io=require("socket.io")(server);
server.listen(9093,function () {
    console.log("node start")
})

下面把app改为server 这样express 就和 io 成功的绑定起来了;


io主要有2个事件。

1,on 监听一个事件。

2,edit  触发执行一个事件。

//使用io的on方法监听,客户端需要第一次主动(io是全局性的),回调函数的socket参数 就是这个连接的本体;
io.on("connection",function (socket) {
    //发起连接成功打印内容
    console.log("connect success")
})

客户端我们 先引入

import React from "react";
//引入socket.io
import io from "socket.io-client";
class Chat extends React.Component{
  componentDidMount(){
        // 因为我们这里是异步了,所以手动调一下端口好,注意现在是websocket,不是http协议; 
    const socket = io("ws://localhost:9093");
  }
    render(){
        return(<div>
            chat
        </div>)
    }
}
export default Chat;
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
node start

connect success

node js 页面成功打印出了 预设的内容 现在连接成功

然后前端 去定义socket上约定前后端的事件名,并且传递内容到后端;

//发送消息方法
saveMsg(){
   //使用sock对象去执行发送请求,第一个参数是自定义事件名,第二个参数是传递内容;
    socket.emit("sendmsg",{text:this.state.text});
    // 清空当前state.text
    this.setState({text:""})
}

后端接受

//使用io的on方法(io是全局性的),回调函数的socket参数 就是这个连接的本体;
io.on("connection",function (socket) {
    //发起连接成功打印内容
    console.log("connect success")
    //使用连接成功后的socket的对象 接收到到sendmsg事件传递过来的参数,并且打印他
    socket.on("sendmsg",function (data) {
        console.log(data);
    })

});

然后后端全局 发送 消息

//使用io的on方法(io是全局性的),回调函数的socket参数 就是这个连接的本体;
io.on("connection",function (socket) {
    //发起连接成功打印内容
    console.log("connect success")
    //使用连接成功后的socket的对象 接收到到sendmsg事件传递过来的参数,并且打印他
    socket.on("sendmsg",function (data) {
        console.log(data);
        //全局发送 事件名为resavemsg的 传递的数据;
        io.emit("resavemsg",data);
    })

});

前端监听这个全局事件的数据

socket.on("resavemsg",function (data) {
    console.log(data)
})

这样就实现了一个前后端互动的局面;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值