位置: 编程技术 - 正文

基于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系统设置)

  • 税务局三师有什么用
  • 境外代扣代缴增值税
  • 固定资产摊余成本例题
  • 税务师考试的报名费怎么还没有退成功
  • 金税盘技术维护费怎么申报
  • 合伙企业借款利息收入个税
  • 打包材料的费用会计分录
  • 退税发票认证流程
  • 私对公转账可以撤回吗
  • 小微企业所得税优惠政策最新2022
  • 销项税额特殊销售额的处理方式
  • 外商投资企业采取发包、出租经营
  • 网络团购的类型
  • 未取得发票的收入怎么做账
  • 会计学中管理费用属于什么
  • 免费样品销售给客户计入什么科目
  • 通讯费可以抵扣进项税吗
  • 公司购电缆用于生产如何记账?
  • 工厂出租厂房税率
  • 非正常工资的个税是多少
  • 广告制作需要缴纳文化事业建设税吗?
  • 外汇实收资本如何做账
  • 公司解散实收资本退还怎么写
  • 已经发货了点击确认收货可以吗?
  • 非流动负债怎么巧记
  • 如何解决win10系统安装不兼容驱动的问题
  • 票已收到款未付怎么办
  • 非货币性资产对外投资会计处理
  • 盒装cpu和散装
  • 工行对公贷款利息扣款时间是几点
  • 所得税和应交所得税
  • mac应用程序图标
  • 特殊性税务处理弥补亏损限额
  • 工会经费税前扣除标准2022
  • 小企业会计准则2023电子版
  • 废旧物资处理怎么入账
  • php连接数据库实现登录注册
  • 未确认融资费用怎么算
  • 做毕业设计,前景如何
  • 模糊数学神经网络
  • php图像识别技术是什么
  • PHP Ajax JavaScript Json获取天气信息实现代码
  • 公司注册资金多长时间可提出来
  • day02-HTML02
  • 支付宝商户服务电话
  • 付款给个人
  • 个人所得税退税退多少钱怎么算
  • 找到一款
  • 研发费用如何进账
  • 小规模防伪税控服务费多少钱
  • 捐赠的资产属于什么科目
  • 递延所得税会计处理全过程
  • 房地产公司预收房款什么时候确认收入
  • 车辆购置税的会计科目怎么写
  • 工程预付款如何扣回
  • 关于低值易耗品的评估说法正确的有()
  • 会计往来账如何记账
  • 企业在销售过程中支付的消费税应通过什么账户进行核算
  • 公司固定资产如何核算
  • 怎样填制记账凭证表
  • sql server常规错误
  • Linux下MySQL5.7.18 yum方式从卸载到安装过程图解
  • mysql数据库基础与实践课后答案
  • dll文件应该放在哪里
  • linux中wget命令出现错误
  • win7系统注册表损坏无法启动怎么修复
  • linux怎么使用ssh命令
  • bash脚本语法
  • 一键清除照片上多余的人
  • unity3d连接数据库
  • 脚本添加crontab
  • jquery 右键菜单
  • 基于nodejs的框架
  • 在javascript中用下面哪个关键词来定义变量
  • jquery easyui插件
  • ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
  • jquery 异步加载
  • 安卓万能插件
  • 税务局遴选能去什么单位
  • 公司零申报可以交社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设