资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
python简单实现websocket协议选择的是新的Hybi-10,参考文章如下:http:/www.cnblogs.com/zhuweisky/p/3930780.htmlhttp:/blog.mycolorway.com/2011/11/22/a-minimal-python-websocket-server/http:/blog.csdn.net/icechenbing/article/details/7407588python代码如下:#-*- coding:utf8 -*-import threadingimport hashlibimport socketimport base64class websocket_thread(threading.Thread): def _init_(self, connection): super(websocket_thread, self)._init_() self.connection = connection def run(self): print new websocket client joined! reply = i got u, from websocket server. length = len(reply) while True: data = self.connection.recv(1024) print parse_data(data) self.connection.send(%c%c%s % (0x81, length, reply) def parse_data(msg): v = ord(msg1) & 0x7f if v = 0x7e: p = 4 elif v = 0x7f: p = 10 else: p = 2 mask = msgp:p+4 data = msgp+4: return .join(chr(ord(v) ord(maskk%4) for k, v in enumerate(data) def parse_headers(msg): headers = header, data = msg.split(rnrn, 1) for line in header.split(rn)1: key, value = line.split(: , 1) headerskey = value headersdata = data return headersdef generate_token(msg): key = msg + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 ser_key = hashlib.sha1(key).digest() return base64.b64encode(ser_key) if _name_ = _main_: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(127.0.0.1, 9000) sock.listen(5) while True: connection, address = sock.accept() try: data = connection.recv(1024) headers = parse_headers(data) token = generate_token(headersSec-WebSocket-Key) connection.send(HTTP/1.1 101 WebSocket Protocol Hybi-10rnUpgrade: WebSocketrnConnection: UpgradernSec-WebSocket-Accept: %srnrn % token) thread = websocket_thread(connection) thread.start() except socket.timeout: print websocket connection timeout测试页面: WebSocketTest 来自服务端的消息 var socket; function connect() var host = ws:/ + $(serverIP).value + : + $(serverPort).value + / socket = new WebSocket(host); try socket.onopen = function (msg) $(btnConnect).disabled = true; alert(连接成功!); ; socket.onmessage = function (msg) if (typeof msg.data = string) displayContent(msg.data); else alert(非文本消息); ; socket.onclose = function (msg) alert(socket closed!) ; catch (ex) log(ex); function send() var msg = $(sendText).value socket.send(msg); window.onbeforeunload = function () try socket.close(); socket = null; catch (ex) ; function $(id) return document.getElementById(id); Date.prototype.Format = function (fmt) /author: meizz var o = M+: this.getMonth() + 1, /月份 d+: this.getDate(), /日 h+: this.getHours(), /小时 m+: this.getMinutes(), /分 s+: this.getSeconds(), /秒 q+: Math.floor(this.getMonth() + 3) / 3), /季度 S:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号