websocket
- WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议;
- 使用协议:ws,其基于 HTTP 协议进行数据传输,但是会持久化链接和状态。
- https://socket.io/
基于 node.js 的 WebSocket 库
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 8181 });
wss.on('connection', function (ws) {
console.log('client connected');
ws.on('message', function (message) {
console.log(message);
});
setInterval(() => {
let somedata = {
name:"张三",
age:20
}
ws.send(JSON.stringify(somedata));
}, 1000);
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 客户端
var ws = new WebSocket("ws://localhost:8181");
ws.onopen = function () {}
ws.send("客户端数据");
ws.close();
ws.onmessage = function(e){
}
socket.io是将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口。兼容所有浏览器,解决浏览器不兼容问题。- 服务端
const server = require('http').createServer(app.callback());
const io = require('socket.io')(server);
server.listen(3000);
let socket = io.connect();
this.emit("clientfn","hello i am client");
socket.on("message",function(data){}
demo
- 简易聊天系统
npm install koa koa-static-cache socket.io- app.js
const Koa = require('koa');
const KoaStaticCache = require('koa-static-cache')
const app = new Koa();
app.use(KoaStaticCache('./public', {
prefix: '/public',
gzip: true,
dynamic: true
}))
const server = require('http').createServer(app.callback());
const users = [];
const options = { };
const io = require('socket.io')(server, options);
io.on('connection', socket => {
users.push({
id: socket.id
});
console.log('有人通过socket链接了');
socket.emit('hello', `欢迎您 ${socket.id}`);
socket.broadcast.emit('hello', `有新的朋友加入 ${socket.id},我们欢迎!👏他`);
socket.broadcast.emit('userUpdate', users);
socket.on('message', data => {
socket.broadcast.emit('message', `${socket.id} 说:${data}`);
})
});
server.listen(8081);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<textarea name="" id="textarea" cols="60" rows="10">textarea>
<input type="text" id="content">
<button id="btn">发送button>
<script src="/socket.io/socket.io.js">script>
<script>
let textarea = document.querySelector('#textarea');
let content = document.querySelector('#content');
let btn = document.querySelector('#btn');
const socket = io('/');
socket.on('hello', data => {
writeData(data);
})
socket.on('message', data => {
writeData(data);
})
socket.on('userUpdate', data => {
console.log(data)
})
btn.onclick = function() {
writeData('我说:' + content.value);
socket.emit('message', content.value);
content.value = '';
content.focus();
}
function writeData(data) {
textarea.innerHTML += data + '\r\n';
}
script>
body>
html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 访问:http://localhost:8081/public/index.html,打开多个窗口,切换窗口发送内容