已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一 什么是 WebSocket API WebSocket API 是下一代客户端 服务器的异步通信方法 该通信取代了单个的 TCP 套 接字 使用 ws 或 wss 协议 可用于任意的客户端和服务器程序 WebSocket 目前由 W3C 进行标准化 WebSocket 已经受到 Firefox 4 Chrome 4 Opera 10 70 以及 Safari 5 等浏览 器的支持 WebSocket API 最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻 相互推送信息 WebSocket 并不限于以 Ajax 或 XHR 方式通信 因为 Ajax 技术需要客户端 发起请求 而 WebSocket 服务器和客户端可以彼此相互推送信息 XHR 受到域的限制 而 WebSocket 允许跨域通信 二 WebSocket 协议 websocket 的协议是很简单的 这里我把它分成客户端和服务端来讲 在客户端 new WebSocket 即可实例化一个新的 websocket 对象 但其参数略微有一点不一样 参数格式 是这样的 ws yourdomain port path WebSocket 对象会自动解析这段字符串 发送到指定 服务器端口 首先执行的是双方握手 handshake 客户端发送数据格式类似这样 GET chat HTTP 1 1 Upgrade WebSocket Connection Upgrade Host 9108 Origin Cookie somenterCookie 这很是有些类似于 http 的头信息 同样每行都是以 r n 结尾的 上面这段格式无需我们 去构造 WebSocket 对象会自动发送 对客户端这是透明的 此时服务端应该返回的信息 是 HTTP 1 1 101 Web Socket Protocol Handshake Upgrade WebSocket Connection Upgrade WebSocket Origin WebSocket Location ws 9108 chat 从这里我们太容易看出来 websocket 协议的握手部分根本就是个类 http 的协议 所不同的 是 http 每次都会有这样子的头信息交互 这在某些时候不得不显得很糟糕 而 websocket 只会执行一次这个过程 之后的传输信息就变得异常简洁了 握手协议 request 中有三个随机的 key 值 头部有两个 后面 body 里是长度为 8 字节的 key3 括号里的文字是提示 还有字符间的冒号也是为了看上去清晰才加上的 真正传输 是没有的 以此向 server 发送一个 challenge server 需要根据这三个 key 计算出一个 token 在响应中发回给 client 以证明自己对 request 的正常解读 计算方法是这样的 对 于 key1 抽取其中的数字字符 形成一个整数 num 然后除以他自身的空格数 spaces 保 留整数部分 i1 key2 如法炮制 得到 i2 把 i1 和 i2 按照 big endian 字符序连接起来 然后 再与 key3 连接 得到一个初始的序列 对这个序列使用 md5 计算出一个 16 字节长的摘要 就是所需的 token 另外值得注意的是 Origin 头部 意味着 Websocket 是支持 cross origin 的 三 在线聊天室代码 客户端 移步至 四 在线聊天室代码 python 服务器端 移步至 运行效果 import sys from twisted internet import reactor from twisted python import log from autobahn websocket import WebSocketServerFactory WebSocketServerProtocol import sleekxmpp reload sys sys setdefaultencoding utf8 class gtalkBot sleekxmpp ClientXMPP A basic SleekXMPP bot that will log in send a message and then log out def init self jid password sleekxmpp ClientXMPP init self jid password self recipient wxg4net self status text self add event handler session start self start self add event handler message self muc message self add event handler presence available self handle presence available self add event handler presence unavailable self handle presence unavailable self add event handler presence dnd self handle presence dnd def start self event self send presence self get roster def handle presence unavailable self presence if cmp presence from bare self recipient 0 self status text presence status def handle presence available self presence if cmp presence from bare self recipient 0 self status text presence status def handle presence dnd self presence if cmp presence from bare self recipient 0 self status text presence status def muc message self msg fwho msg from bare body msg body if cmp body qsbk 0 self send message mto fwho mbody 当前服务已关闭 mtype chat elif cmp body help 0 self send message mto fwho mbody 当前服务开发中 mtype chat elif cmp fwho self recipient 0 factory broadcast str body else self send message mto fwho mbody 当前服务开发中 mtype chat def sendMessageTome self message self send message mto wxg4net mbody message mtype chat python websocket class BroadcastServerProtocol WebSocketServerProtocol def init self self istip True self Heartbeat def Heartbeat self reactor callLater 1 self Heartbeat def onOpen self self factory register self def onMessage self msg binary xmpp sendMessageTome msg if self istip self sendMessage 你好 websocket python 的当前状态是 str xmpp status text 祝你生活愉快 self istip False def connectionLost self reason WebSocketServerProtocol connectionLost self reason self factory unregister self class BroadcastServerFactory WebSocketServerFactory protocol BroadcastServerProtocol def init self WebSocketServerFactory init self self clients def register self client if not client in self clients self clients append client def unregister self client if client in self clients self clients remove client def broadcast self message if self clients for c in self clients c sendMessage message if name main 1a58 log startLogging sys stdout xmpp gtalkBot phz
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南京视觉艺术职业学院单招职业技能测试模拟测试卷及答案解析(夺冠)
- 2025智慧水务系统建设投资机会评价及发展报告
- 2025年律师培训试题及答案
- 摄影灯光考试题及答案
- 社招编程笔试题目及答案
- 2025年南航后勤集团面试题库及答案
- 2026中国再保险(集团)股份有限公司校园招聘考试模拟卷带答案解析
- 2025年旭阳化工招聘面试题库及答案
- 单证主管助理单证文件管理技巧
- 密码加密技术员密码加密技术员项目管理办法
- 2026中央纪委国家监委机关直属单位招聘工作人员24人笔试备考题库附答案解析
- 2025江苏盐城下半年射阳县招聘政府购买服务工作人员107人考试笔试备考题库及答案解析
- 药学专业社会实践报告3000字
- 《地方导游基础知识》课程标准
- 人教版四年级上册数学期末测试卷及参考答案(模拟题)
- 中西文化鉴赏智慧树知到答案章节测试2023年郑州大学
- 企业案例跨文化管理
- GB/T 799-2020地脚螺栓
- 《会展营销》试卷1
- 耕整地机械课件
- 岛津LC2030液相确认方案
评论
0/150
提交评论