python版websocket server在handshake时返回数据的处理
2010-11-11 15:18
344 查看
折腾了三天,终于把socket server在handshake时的处理给整通了,前端的onopen事件终于响应了!!!
先贴一下关键部分的代码,记录一下:
==========================================================
def getKey(message):
>> num1 = re.findall(r'Sec-WebSocket-Key1: (.*)\n',message)[0]
>> num2 = re.findall(r'Sec-WebSocket-Key2: (.*)\n',message)[0]
>> key = re.findall(r'\r\n\r\n(.*)$',message)[0]
>> num1_num = int("".join(re.findall(r'\d',num1)))
>> num1_space = len(re.findall(r' ',num1))
>> num2_num = int("".join(re.findall(r'\d',num2)))
>> num2_space = len(re.findall(r' ',num2))
>> return "%s%s%s" % (struct.pack('>L',num1_num/num1_space),struct.pack('>L',num2_num/num2_space),key)
def socketItem(con):
>> while True :
>>>> message = con.recv(1024)
>>>> if not message : break
>>>> print message
>>>> key = getKey(message)
>>>> key = hashlib.md5(key).digest()
>>>> msg = '''HTTP/1.1 101 WebSocket Protocol Handshake\r
Upgrade: WebSocket\r
Connection: Upgrade\r
Sec-WebSocket-Origin: http://localhost\r Sec-WebSocket-Location: ws://localhost:9111/\r
Sec-WebSocket-Protocol: sample\r\n\r
%s'''.strip() % key
>>>> print msg
>>>> con.send(msg)
============================================
几个重要心得:
1) python转化32位整数用 instruct.pack(">L",num);
2) 管你几进制的数据,反正都能直接相加;
3) 百度在这个时候真是没用,还是得靠google去搜国内的网站才给力,鄙视百度一个 凸 — — 凸。
4) 和handshake无关,但也记一笔。server端send数据时,首尾要分别加“\x00”和"\xFF",中间的正文部分要是utf8格式的,s.encode("UTF8")一下。
先贴一下关键部分的代码,记录一下:
==========================================================
def getKey(message):
>> num1 = re.findall(r'Sec-WebSocket-Key1: (.*)\n',message)[0]
>> num2 = re.findall(r'Sec-WebSocket-Key2: (.*)\n',message)[0]
>> key = re.findall(r'\r\n\r\n(.*)$',message)[0]
>> num1_num = int("".join(re.findall(r'\d',num1)))
>> num1_space = len(re.findall(r' ',num1))
>> num2_num = int("".join(re.findall(r'\d',num2)))
>> num2_space = len(re.findall(r' ',num2))
>> return "%s%s%s" % (struct.pack('>L',num1_num/num1_space),struct.pack('>L',num2_num/num2_space),key)
def socketItem(con):
>> while True :
>>>> message = con.recv(1024)
>>>> if not message : break
>>>> print message
>>>> key = getKey(message)
>>>> key = hashlib.md5(key).digest()
>>>> msg = '''HTTP/1.1 101 WebSocket Protocol Handshake\r
Upgrade: WebSocket\r
Connection: Upgrade\r
Sec-WebSocket-Origin: http://localhost\r Sec-WebSocket-Location: ws://localhost:9111/\r
Sec-WebSocket-Protocol: sample\r\n\r
%s'''.strip() % key
>>>> print msg
>>>> con.send(msg)
============================================
几个重要心得:
1) python转化32位整数用 instruct.pack(">L",num);
2) 管你几进制的数据,反正都能直接相加;
3) 百度在这个时候真是没用,还是得靠google去搜国内的网站才给力,鄙视百度一个 凸 — — 凸。
4) 和handshake无关,但也记一笔。server端send数据时,首尾要分别加“\x00”和"\xFF",中间的正文部分要是utf8格式的,s.encode("UTF8")一下。
相关文章推荐
- ean13码的生成,python读取csv中数据并处理返回并写入到另一个csv文件中
- jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
- Python 处理server返回gzip内容
- python urllib2导出elasticsearch数据时 返回 "urllib2.HTTPError: HTTP Error 500: Internal Server Error"
- jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
- jQuery form插件的使用--处理server返回的JSON, XML,HTML数据
- JS中eval()函数处理返回的json数据
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - 数客
- [jQuery] 关于使用 ajax 时处理返回的数据
- 使用python对高光谱数据进行处理和分类
- Python—HTTP处理Gzip压缩数据
- Python下的机器学习工具sklearn--数据预处理
- Python数据解析 - 使用csv模块处理CSV格式数据
- springmvc modelview 返回数据与页面交互处理
- python 大数据处理小结
- 使用Python Pandas处理亿级数据
- 使用python统计处理jira数据
- python pd.crosstab在处理时间序列文本数据的用处
- python 科学计算学习一:numpy快速处理数据(1)
- JMeter中返回Json数据的处理方法