前期准备

会使用 create-react-app 构建react项目。
会使用express 构建 server项目。
会使用socket.io。

实施过程

1.构建react项目(client)

  • 新建文件夹 Demo
  • 构建react项目
create-react-app socket-01
cd socket-01
npm start 
  • 安装socket.io-client

    cnpm socket.io-client --save

src中删除没有必要的文件。留下App.js 和 index.js

2.构建express(server)

  • 在 Demo 文件夹中创建 express 文件夹。
  • 在 express 文件夹中创建 n1.js
  • 在 express 文件夹中安装项目依赖。

    cnpm i express socket.io
    基本的目录结构如下:

1556155052158-5c30455b-047d-4c5d-bfe1-23632d79eea2.png

1556155107339-6ccf7d1b-2b87-491b-a100-ee8470e28605.png

3.代码实施
n1.js

var http = require('http');
var io = require('socket.io');

var server = http.createServer((req,res) => {

});

server.listen(2183);

var arr = [];

io.listen(server).on('connection',(user) => {
    user.broadcast.emit('msg','有人上线了');
    // 进来一个用户,arr就有1个。就是将用户添加到arr中去
    arr.push(user);
        // 测试前台button以后能否接收到数据
        user.on('msg',(str) => {
        // broadcast 除了自己,给剩下的其他用户发送信息
        user.broadcast.emit('msg',str);
        user.emit('msg',str);
    });
    // 下线了
    user.on('disconnect',() => {
        user.broadcast.emit('msg','有人下线了')
    })  
});

App.js

import React,{Component} from 'react';
//引入sockket.io-client包 
import io from 'socket.io-client';
class App extends Component {
  constructor(props){
    super(props);
    this.state = {
    }
  }
  // 建立通讯在componentDidMount生命周期函数内
  componentDidMount(){
    // 定义一个socket用于接收server传过来的url地址
      const socket = io('http://localhost:2183')
      this.refs.b.onclick = x => {
        // 当点击发送的时候将输入框中的内容传递到server端,emit为发送函数
        socket.emit('msg',this.refs.t.value)
      };
        // 接受server端传过来的信息
      socket.on('msg',(str) => {
        //console.log(str);
        var oLi = document.createElement('li');
        // 写入html页面中
        oLi.innerHTML = str;
        this.refs.ul.appendChild(oLi);
    });
  }
  render(){
    return (
      <div>
        {/* refs字符串形式 */}
        <input type="text" ref="t"/>
        <button ref="b">发送</button>
        <ul ref="ul"></ul>
      </div>
    );
  }
}
export default App;
Last modification:October 19th, 2019 at 04:40 pm
如果觉得我的文章对你有用,请随意赞赏