聊天功能插件Socket.io
一、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
聊天功能插件Socket.io的更多相关文章
- 使用node.js实现多人聊天室(socket.io、B/S)
通过B/S架构实现多人聊天,客户端连接服务器,发送信息,服务器接收信息之后返回给客户端. 主要是通过socket.io实现浏览器和服务器之间进行实时,双向和基于事件的通信. socket.io官方文档 ...
- 解决Socket.IO在IE8下触发disconnect时间过长
本文地址: http://www.cnblogs.com/blackmanba/p/solve-socketIO-IE8-emit-disconnect-too-long.html或者http://f ...
- nodejs + socket.io + redis 新手上路
最近要更新网站架构了,决定转入 nodejs + socket.io + redis 方式. 战斗刚开始: 网上的文章太松散,我根据各个网友的分享进行整理 ,让大家可以方便上手. 进入node.js之 ...
- 实时通讯之Socket.io
WebSocket WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.使用WebSocket,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成 ...
- node+express+socket.io制作一个聊天室功能
首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js var http=require("http ...
- 使用socket.io实现简单的聊天功能
Socket.io实际上是WebSocket的父集,Socket.io封装了WebSocket和轮询等方法 首先得在你的项目中安装socket.io $ npm install socket.io 服 ...
- socket.io插件调用的demo
1.利用socket.io插件制作一个聊天框,原理是输入对话,发送到服务,服务器在返回相应的对话,最后插入页面中,时间对话的功能,这里我是使用的node.js搭建的服务器. 附上源码 <!DOC ...
- nodejs之socket.io 聊天实现
写在前面:最近很火的“996”话题,可谓是引起一片热议,马老师说:能够996应该是幸运的,996是对奋斗者的一种机遇(记得不是很清楚).996缺少的是自己的空闲时间了,当我是空闲的时候偶尔996挺好的 ...
- Socket.IO聊天室~简单实用
小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...
随机推荐
- Windows 10 KMS 手工激活
第一.安装好Win10系统,不需要安装其他激活工具.第二.是删除默认序列号,打开命令提示符(管理员),运行 slmgr.vbs -upk,可提示已卸载了序列号. slmgr /ipk W269N-WF ...
- C# Winform App 获取当前路径
直接双击执行 D:\test1.exeSystem.Diagnostics.Process.GetCurrentProcess().MainModule.FileName D:\Test1.exe S ...
- [原]如何在Android用FFmpeg+SDL2.0之同步视频
关于视频同步的原理可以参考http://dranger.com/ffmpeg/tutorial05.html 和 [原]基础学习视频解码之同步视频 这两篇文章,本文是在这两篇的基础上移植到了Andro ...
- 移动端适配插件(flexible.js)
;(function(win, lib) { var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.que ...
- sqlserver 2008 r2 直接下载地址,可用迅雷下载
转自 http://www.cnblogs.com/chinafine/archive/2010/12/23/1915312.html sqlserver 2008 r2 直接下载地址,可用迅雷下载 ...
- UVa 10003 - Cutting Sticks(区间DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Tomcat整体介绍
来源 本文整理自 <Tomcat内核设计剖析>.<Tomcat结构解析> Tomcat 整体架构 如上图所示:包含了Tomcat内部的主要组件,每个组件之间的层次包含关系很 ...
- 轻量ORM-SqlRepoEx (九)与Dapper共舞
Dapper就另一个轻量ORM,Dapper及其扩展解决了数据访问端的大部门问题,提供了如数据事务管理.缓存等支持.SqlRepoEx的重点解决了Lambda转换成SQL语句,使SQL使用强类型编写, ...
- Memcache随笔
Tip01: Memcache 中记录的缓存如果你设置了失效时间,之后如果你在系统时间中将时间修改为超过失效时间,再次访问之前你设置的资源,Memcache 会认为你设置的缓存已失效: Tip02: ...
- 我的前端工具集(六)Ajax封装token
我的前端工具集(六)Ajax封装token liuyuhang原创,未经允许禁止转载 在单点登陆中,或登陆验证后,不应该每次都验证用户名和密码, 也不应该将用户名密码存入cookie中(虽然很多都 ...