日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现websocket服务端

發布時間:2025/3/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现websocket服务端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

ws.py是服務端,文件內容如下

#!/usr/bin/env python import socket import base64 import hashlib import struct from select import select class dryWebSocket():#####@staticmethoddef handShake(serverHandle):key = ''data = serverHandle.recv(8192)for line in data.split('\r\n\r\n')[0].split('\r\n')[1:]:k, v = line.split(': ')if k == 'Sec-WebSocket-Key':key = base64.b64encode(hashlib.sha1(v + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11').digest())response = 'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept:%s\r\n\r\n' % keyserverHandle.send(response)return True#####@staticmethoddef recv(serverHandle, size=8192):data = serverHandle.recv(size)if not len(data):return Falselength = ord(data[1]) & 127if length == 126:mask = data[4:8]raw = data[8:]elif length == 127:mask = data[10:14]raw = data[14:]else:mask = data[2:6]raw = data[6:]ret = ''for cnt, d in enumerate(raw):ret += chr(ord(d) ^ ord(mask[cnt%4]))return ret#####@staticmethoddef send(serverHandle, data):head = '\x81'if len(data) < 126:head += struct.pack('B', len(data))elif len(data) <= 0xFFFF:head += struct.pack('!BH', 126, len(data))else:head += struct.pack('!BQ', 127, len(data))serverHandle.send(head + data) ########################################################################################## server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) socketList = set() ########## def run(ip, port, count, function, debug):server.bind((ip, port))server.listen(count)socketList.add(server)print 'websocket server start on port %d' % portwhile True:r, w, e = select(socketList, [], [])for sock in r:if sock == server:serverHandle, addr = sock.accept()if dryWebSocket.handShake(serverHandle):socketList.add(serverHandle)else:data = dryWebSocket.recv(sock)if not data:socketList.remove(sock)else:function(sock, data, debug) ########## def dataDo(serverHandle, data, debug):if debug:print datadryWebSocket.send(serverHandle, data) ########## if __name__ == '__main__':run('0.0.0.0', 7000, 100, dataDo, True)

ws.html是客戶端,文件內容如下

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>webSocketClient</title> </head> <body> <table><tr><td><p><input type="text" id="ip" value="127.0.0.1"/></p><p><input type="text" id="port" value="7000"/></p><p><input type="text" id="data" value="test"/></p><p><input type="button" value="打開連接" onclick="theOpen()"/></p><p><input type="button" value="發送輸入數據" onclick="theInputData()"/></p><p><input type="button" value="發送隨機數據" onclick="theRandData()"/></p><p><input type="button" value="清空日志" onclick="theClear()"/></p></td></tr> </table> <p id="show"></p> <script type="text/javascript"> var $$=function(id){return document.getElementById(id);} var client=''; var ipElement=$$('ip'); var portElement=$$('port'); var dataElement=$$('data'); var showElement=$$('show'); /**/ function theOpen(){if(client==''){client=new WebSocket('ws://'+ipElement.value+':'+portElement.value);client.onopen=function(){onOpenHandle();};client.onmessage=function(event){onMessageHandle(event);};client.onclose=function(event){onCloseHandle();};}else{showMessage('has opened');} } function theInputData(){client.send(dataElement.value); } function theRandData(){client.send(Math.random()); } function theClear(){showElement.innerHTML=''; } /**/ function onOpenHandle(){showMessage('open'); } function onMessageHandle(event){showMessage('receive:'+event.data); } function onCloseHandle(){showMessage('close');client=''; } /**/ function showMessage(msg){var html=showElement.innerHTML;showElement.innerHTML=html+"<br>"+msg; } </script> </body> </html>

?

轉載于:https://my.oschina.net/mickelfeng/blog/903837

總結

以上是生活随笔為你收集整理的python实现websocket服务端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。