赞
踩
它与 http 协议一样,也是一种通讯协议
http 协议:
websocket 协议:
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话
总结: websocket 的运行流程
这里是一个简单的客户端显示,所以服务器是人家已经建好的
// 创建一个websocket实例 // 由客户端与服务器建立连接 var ws = new WebSocket("wss://echo.websocket.org") // 客户端建立连接成功后的回调函数 ws.onopen = function (evt) { console.log('连接成功...') // 连接成功后客户端发送消息给服务器 ws.send('hellow! websocket') } // 客户端成功接收服务器响应的消息执行的回调函数 ws.onmessage = function (evt) { console.log('服务器响应回来的消息是' + evt.data) // 关闭连接 ws.close() } // 关闭连接成功后的回调函数 ws.onclose = function () { console.log('关闭成功') }
使用一个基于 websocket 的第三方包 socket.io 来完成聊天室
服务器
客户端
demo传送门
步骤:
view
总结:
socket.emit(key, value)
socket.on(key, v => { // v 就是接收的参数 })
socket.emit(key, value)
io.emit(key, v => {} )
socket.on(key, v => {})
index.js(服务端器):
// 创建一个服务器 // 导入express const app = require('express')() // 导入http模块,根据app,创建一个服务 const http = require('http').createServer(app) //1. 导入socket.io const io = require('socket.io')(http) //设置响应给用户看的内容 app.get('/', (req, res) => { // 请求根目录时返回这个静态页面 res.sendFile(__dirname + '/views/index.html') }) // 4. 开启websocket连接 io.on('connection', (socket) => { // 6. 服务端接受参数 // 这里的socket是,谁发消息回来就是谁 // io是socket对象 socket.on('passmsg', msg => { // console.log(msg) console.log(socket) // 7. 将接收到的消息响应给客户端 // socket.emit('passmsg', msg) //消息的回复 io.emit('passmsg', msg) // 消息的广播 }) }) // 打开服务器 http.listen(3000, () => { console.log('开启成功') })
views文件夹中的index.html(客户端):
<!doctype html> <html> <head> <title>Socket.IO chat</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font: 13px Helvetica, Arial; } form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } form input { border: 0; padding: 10px; width: 90%; margin-right: 0.5%; } form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #eee; } </style> </head> <body> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> </body> <!-- 2.导入socket --> <script src="/socket.io/socket.io.js"></script> <!-- 导入jquery --> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script> $(function () { // 3. 创建一个socket对象,连接服务器 const socket = io('http://192.168.14.52:3000/') // 5. 客户端向服务端发送消息 //给form添加一个提交事件 $('form').submit(function (e) { e.preventDefault(); //阻止默认行为 // io创建的socket对象 socket.emit('passmsg', $('#m').val()) // 清除输入框的内容 $('#m').val('') return false }) // 8.客户端接收服务端的消息 socket.on('passmsg', msg => { //接收到的msg渲染到ul中 // 创建一个li标签 // var li = $('<li>') // // 给li标签设置内容 // li.html(msg) // // 将li添加到ul中 // $('#messages').append(li) $('#messages').append($('<li>').html(msg)) }) }) </script> </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。