IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> websocket简单聊天室 -> 正文阅读

[网络协议]websocket简单聊天室

一、基础介绍

websocket 全双工通信-socket 端对端通信
`一端创建socket实例+连接一端的ip和端口(client)
`另一端创建socket绑定本地端口进行监听(server)
> 客户端连接服务端,服务端接收之后 建立端对端tcp连接
> 实现双向通讯,一旦连接之后没有服务端、客户端之分。
> socket方便网络编程对tcp、ip协议族通信机制的封装。
> GoEasy
协议名和hettp不同,其他和传统url一样:
> ws://echo.websocket.org/?encoding=text HTTP/1.1,
origin:
> http://websocket.org/
websocket提供两种数据传输:文本数据和二进制数据。
颠覆了之前web开发的请求处理响应模式(之前是只能客户端发送请求后,服务端响应。now可以服务端向客户端发送请求)

在webscoket之前:(可以使用的web即时通讯)
>定期轮询的方式
>SSE(Server-Sent Event,服务端推送事件)
>Comet技术
>就算websocket已经作为规范被提出并实现,但是对于老式浏览器,我们依然需要将它降级为以上方式来实现实时交互和服务端数据推送。

学习网址:
1: http://www.52im.net/forum.php?mod=viewthread&tid=331&ctid=15

在这里插入图片描述


2: http://www.ruanyifeng.com/blog/2017/05/websocket.html

在这里插入图片描述

可以直接运行出来的源码:
https://blog.csdn.net/Cd_Air/article/details/120809090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164713572916780265415930%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164713572916780265415930&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-6-120809090.nonecase&utm_term=webscoket%E5%AE%9E%E7%8E%B0%E8%81%8A%E5%A4%A9%E5%8A%9F%E8%83%BDhtml+js&spm=1018.2226.3001.4450

https://www.cnblogs.com/yangsg/p/10675533.html

二、server、client
简单的前端网页可以实现:html+js

①client:
1、创建对象
var socket = new WebSocket("ws://localhost:端口号");
2、事件监听
①socket.addEventListener("open", () => {})  
	input.value;     输入值
	socket .send()   这步就可以发送数据了 
	button.addEventListener("click", () => {}) 可以在前端设置个按钮什么的
	div.innerHTML
②socket.addEventListener("message", (e) => {
            div.innerHTML = JSON.parse(e.data);
        });
也可以使用
ws=new WebSocket('ws://localhost:端口号');
ws.onopen=function(){}	
ws.onmessage
ws.onclose
ws.onerror
open:当和websocket的服务器连接成功时触发
send:发送数据给服务器
message:接收服务器数据

②server
//协议标识符是ws(如果加密,则为wss)
const ws = require("nodejs-Websocket");
下载包:npm i
createServer\listen
const PORT = 和客户端一样的端口号;
const server = ws.createServer((conn) => {
    conn.on("text", (data) => {
        broadcast(data);
    })
    conn.on("close", (data) => {
        console.log("连接关闭")
    });
    // 异常时触发
    conn.on("error", (data) => {
        console.log("触发异常")
    });

}).listen(PORT, () => {
    console.log("监听端口:" + PORT);
});

function broadcast(msg) {
    server.connections.forEach((item) => {
        item.send(JSON.stringify(msg));
    });
}

三、luanqibazao学习

发送 ArrayBuffer 对象的例子.......
// Sending canvas ImageData as ArrayBuffer
var img = canvas_context.getImageData(0, 0, 400, 320);
var binary = new Uint8Array(img.data.length);
for (var i = 0; i < img.data.length; i++) {
  binary[i] = img.data[i];
}
ws.send(binary.buffer);
JSON.stringify(value[, replacer[, space]])
网址:https://www.runoob.com/js/javascript-json-stringify.html
JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。
三个参数
JSON.stringify(value[, replacer[, space]])
value 必须 要转换的js值,通常为对象或数组
replacer 可选 用于转换结果的函数或数组
space 可选 文本添加缩进\t、空格、换行符

JSON.parse()可以把JSON规则的字符串转换为JSONObject
网址:https://www.runoob.com/json/json-parse.html
拓展的json学习:https://www.sojson.com/json/json_parse.html
这个直接取出value
https://socket.io/docs/v4/

四、运行

项目运行方式:
包先下载好(网址:https://www.jianshu.com/p/f0baf93a3795)
--在server.js目录下node ./server.js
--vs右键打开html即可

在这里插入图片描述
五、others
querySelector和getElementById

querySelector()
使用:
获取id:
document.querySelector("#demo");
获取class
document.querySelector(".demo");
获取元素
document.querySelector("div");
获取文档中 class="example" 的第一个 <p> 元素:
document.querySelector("p.example");
querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。
query选择符选出来的元素及元素数组是静态的,而getElement这种方法选出的元素是动态的。
var text= document.getElementById("text");
注意这个text是id选择器属性。
返回值标签可以放在label或者div等
Broadcast:在websocket-shap函数的定义是:向Websocket服务中的每个客户端发送数据,类似于广播的效果
如果要使用异步发送,可使用BroadcastAsync函数。

在这里插入图片描述

源码:https://gitee.com/up6666/websocket.git
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 23:04:40  更:2022-03-15 23:05:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:47:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码