一、Socket.io是什么

  是基于时间的实时双向通讯库

  基于websocket协议的

  前后端通过时间进行双向通讯

  配合express快速开发实时应用

二、Socket.io和ajax区别

  基于不同的网络协议

  ajax基于http协议,单向,实时获取数据只能轮询

  socket.io基于websocket双向通讯协议,后端可以主动推送数据

  现代浏览器均支持websocket协议(不必担心兼容问题)

如何安装socket.io

  npm install socket.io --save (后端)

npm install socket.io-client --save(前端)

配合express(后端API)(只是顺带说一下不详解)

  *io=require('socket.io')(http)

  *io.on 监听事件

  *io.emit触发事件

  如下代码

.....
const app = express()
// work with express
const server = require('http').Server(app) const io = require('socket.io')(server) io.on('connection',function(socket){
console.log('user login')
socket.on('sendmsg',function(data){ //*************接收
console.log(data)
const {from, to, msg} = data
const chatid = [from,to].sort().join('_')
Chat.create({chatid,from,to,content:msg},function(err,doc){
io.emit('recvmsg', Object.assign({},doc._doc)) //发送到全局
})
// console.log(data)
// io.emit('recvmsg',data)
})
})
....
server.listen(,function(){
console.log('Node app start at port 9093')
})

配合express(前端API)

  *Import io from 'socket.io-client'

  *io.on 监听事件

  *io.emit 触发事件

前端发送消息

  

import React from 'react'
import {List,InputItem,NavBar,Icon, Grid} from 'antd-mobile'
import io from 'socket.io-client'
const socket = io('ws://localhost:9093')
class Chat extends React.Component{
constructor(props){
super(props)
this.state={text:''}
}
componentDidMount(){
socket.on('recvmsg',(data)=>{
      this.setState({
        msg:[...this.state.msg,data.text]
      })  
    })
}
handleSubmit(){
socket.emit('sendmsg',{text:this.state.text})
this.setState({text:''})
}
render(){
<div>
{
              this.state.msg.map(v=>{
                return <p key={v}>{v}</p>
              })
             }
<List>
<InputItem
placeholder='请输入'
value={this.state.text}
onChange={v=>{
this.setState({text:v})
}}
extra={<span onClick={()=>this.handleSubmit()}>发送</span>}
>
信息
</InputItem>
</List>
</div>
)
}
} export default Chat

最新文章

  1. 轻量级前端MVVM框架avalon - 模型转换
  2. SSR———团队作业:小型论坛的设计与初步实现
  3. c#dataGridView奇偶数行变色
  4. openldap主机访问控制(基于ip)
  5. LAMP安全设置
  6. svn 提交冲突(目录下删除文件)
  7. class属性中为什会添加非样式的属性值?
  8. jQuery实现等比例缩放大图片让大图片自适应页面布局
  9. memcached和redis的区别和应用场景
  10. Maven中央(或国内)仓库地址
  11. PAT (Advanced Level) 1019. General Palindromic Number (20)
  12. Android OpenGL ES 入门系列(一) --- 了解OpenGL ES的前世今生
  13. 重新认识AWS
  14. 原生js代码挑战之动态添加双色球
  15. MVC 执行顺序
  16. 2018-2019-2 网络对抗技术 20165304 Exp4 恶意代码分析
  17. DAY08、文件操作
  18. c c++ 函数不要返回局部变量的指针
  19. ffmpeg主体架构分析
  20. .Net 上传文件和下载文件

热门文章

  1. Fcoin和Coinex,谁更值得投资?
  2. HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
  3. 安装最新版的wampserver,可以兼容php5和php7
  4. springmvc小结(上)
  5. selenium基础知识(概述、安装、IDE等)
  6. js 飞机大战
  7. 一款css3的标签动画效果
  8. Anaconda安装与常用命令及方法(深度学习入门1)
  9. Anaconda常用命令
  10. MVC学习十四:MVC 路由 Route