位置: 编程技术 - 正文

基于node实现websocket协议(node实战)

编辑:rootadmin

推荐整理分享基于node实现websocket协议(node实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:基于node的网站有哪些,基于node实现多人聊天室,基于node实现多人聊天室,基于nodejs的项目,基于node实现js破解,基于nodejs的项目,基于node的网站有哪些,基于node实现多人聊天室,内容如对您有帮助,希望把文章链接给更多的朋友!

一、协议WebSocket是一种基于TCP之上的客户端与服务器全双工通讯的协议,它在HTML5中被定义,也是新一代webapp的基础规范之一。

它突破了早先的AJAX的限制,关键在于实时性,服务器可以主动推送内容 到客户端!可能的应用有:多人在线游戏,即时聊天,实时监控,远程桌面,新闻服务器等等。

对于我自己,当前最想尝试的是canvas+websocket组合起来能做什么。

二、实现由于握手的过程是一个标准的HTTP请求,因此 websocket 的实现有两种选择:1)TCP上实现; 2) 现有HTTP软件上实现。后者的优势在于可以共用现有的HTTP服务器端口,并且不用重新实现认证功能和解析HTTP请求的功能。

这个示例中使用的 node 的HTTP模块。(TCP版及所有文件见 附件)

1、node服务器端代码:

2、浏览器客户端代码:

三、细节在 http 协议之上的 websocket 协议实现只有两步:握手,发送数据。

1、握手握手的过程被称为 challenge-response。首先客户端发起一个名为Upgrade的HTTP GET请求,服务器验证此请求,给出响应以表示接受此次协议升级,握手即完成了。

基于node实现websocket协议(node实战)

chrome inspector美化过的握手信息:

Request URL: Method:GETStatus Code: WebSocket Protocol Handshake

Request HeadersConnection:UpgradeHost:...:Origin: G T jAf2Sec-WebSocket-Key2:z Z Q ^ 5 9= 7s1 1 7H4Sec-WebSocket-Protocol::my-custom-chat-protocolUpgrade:WebSocket(Key3):7C:::CA:1F::D2:0A

Response HeadersConnection:UpgradeSec-WebSocket-Location: Response)::DF:2C:F4::C2:8E:::B7:7D::CF:C8::

请求头部分

Host: websocket服务器主机Connection: 连接类型Upgrade: 协议升级类型Origin: 访问来源Sec-WebSocket-Protocol: 可选,子协议名称,由应用自己定义,多个协议用空格分割。(*另外一个仅剩的可选项是cookie)Sec-WebSocket-Key1: 安全认证key,xhr请求不能伪造'sec-'开头的请求头。Sec-WebSocket-Key2: 同上Key3: 响应体内容,8字节随机。响应头部分

Sec-WebSocket-Protocol: 必须包含请求的子协议名Sec-WebSocket-Origin: 必须等于请求的来源Sec-WebSocket-Location: 必须等于请求的地址Challenge Response: 响应体内容,根据请求中三个key计算得来,字节。应答字符串计算过程伪代码:

位整数的big_endian计算策略:

2、发送数据WebSocket API的被设计成用事件处理数据,客户端只要得到事件通知就可以获取到完整的数据,而不需要手动处理缓冲器。

这种情况下,每一笔数据被称为一帧。在规范的定义中,它的头部必须以0x开始,尾部属性以0xff结束,这样每一次数据发送至少有两个字节。

服务器实现中,收到数据时要截掉头尾;而发送数据是要包装头尾。格式如下:

# '你好'的原始二进制表示,请求头和这里都是utf8编码<Buffer e4 bd a0 e5 a5 bd># 包装后的二进制表示。<Buffer e4 bd a0 e5 a5 bd ff>

标签: node实战

本文链接地址:https://www.jiuchutong.com/biancheng/370724.html 转载请保留说明!

上一篇:基于 Node.js 实现前后端分离(node-js)

下一篇:Windows 系统下设置Nodejs NPM全局路径(window系统设置)

  • 自然人税收管理系统残疾人申报
  • 农资公司性质
  • 白酒和烟草 纳税总额
  • 金蝶标准版如何结转到下月
  • 12月工资1月发个税怎么算
  • 生产设备租赁费计入什么科目
  • 购入汽车的增值税可以抵扣差额开具的销项吗
  • 民间非营利组织算企业吗
  • 注册资本余额为100万亿元
  • 税务局开运费发票需要带什么
  • 销售之后发生销货折让收到红字发票如何做账?
  • 个体户没有营业执照怎么举报
  • 收到货款做账
  • 收到投资款现金流量项目是什么
  • 灭草剂使用说明
  • 异地施工增值税发票如何开具
  • 纳税申报成功
  • 预缴增值税税款网上申报操作流程
  • 一般企业每个月的保洁费用是多少
  • 金税三期收回长期投资所得税如何申报?
  • 企业所得税计提金额怎么算
  • 营改增后建筑安装发票
  • 330税盘费是什么意思?
  • 不得抵扣进项税额是交税还是不交
  • 账外资产评估入账固定资产折旧可以税前扣除吗?
  • 在window系统中哪些用户可以查看日志
  • win7为什么现在不能用了
  • 支付工程款需要什么财务手续
  • 新成立股份有限公司股本构成
  • 股东向公司借款协议书范本
  • 代扣代缴手续费比例
  • PHP:imagepsextendfont()的用法_GD库图像处理函数
  • 新事业单位会计准则
  • php 加密
  • html前端技术
  • 应付债券和应付利息
  • 同一控制下企业合并和非同一控制下企业合并的区别
  • 租赁合同印花税怎么申报缴纳
  • 如何补缴以前年度的税
  • 走工资支付福利怎么算
  • 确定负债排列顺序的依据
  • 哪些费用计入管理费用
  • 三证合一后个体交税吗
  • 罚款支出计入什么费用
  • sqlserver导入导出数据库
  • 未分配利润分配后在报表如何体现
  • 汇算清缴要求
  • 农副产品商贸公司如何做账
  • 银行保函会计处理
  • 应付工资比计提工资高
  • 开空头发票犯法吗
  • 冲销以前年度主营业务成本
  • 单位临时账户可以取现吗
  • 库存商品发出计价测试
  • 社保费申报是当月的
  • 没有报关单可以出口吗
  • 现金日记账本月合计怎么划线
  • 租赁期限为一年
  • 年化收益率怎么算
  • mysql获取今天数据
  • ubuntu搭建vsftp
  • WIN10系统英文怎么改中文?
  • js实现图片放大功能
  • shell脚本数组的用法
  • 批量替换在哪
  • h1标签的使用完全正确的是
  • js实现物体移动
  • unity3d快速入门
  • input按钮的事件处理大全
  • 百度定位服务平台
  • js进行表单验证的目的是什么
  • 比较常见的电子商务模式
  • js eval
  • jquery cookie用法
  • jquery实现搜索功能
  • 四川省 税务局
  • 运输类税点
  • 地税局一般几点下班
  • 哪个部门负责药品检验
  • 税务年报怎么操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设