python长连接框架_python之websocket【长连接的实现】
websocket技術簡單來說就是實現了長連接的技術,相對于傳統的ajax或者輪詢,websocket主要實現了雙通信,并且減少了長輪詢的多次請求的時間。總的來說,在很多應用上面能夠發揮更好的作用,比如在線聊天等。下面主要寫下python下面的server端的實現代碼,以及client端代碼,最終是瀏覽器端的js實現的client代碼。
python的server端:
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
await websocket.send(message)
print(message)
asyncio.get_event_loop().run_until_complete(
websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()
python的client端:
import asyncio
import websockets
import time
async def hello(uri):
async with websockets.connect(uri) as websocket:
while True:
send=input("輸入要發送的內容:")
await websocket.send(send)
greeting = await websocket.recv()
print(greeting)
#time.sleep(3)
asyncio.get_event_loop().run_until_complete(hello('ws://localhost:8765'))
js的client端:
websocket(runoob.com)wwwww
var socket = new WebSocket('ws://localhost:8765');
// 打開Socket
socket.onopen = function(event) {
// 發送一個初始化消息
socket.send('I am the client and I\'m listening!');
// 監聽消息
socket.onmessage = function(event) {
console.log('Client received a message',event);
};
// 監聽Socket的關閉
socket.onclose = function(event) {
console.log('Client notified socket has closed',event);
};
// 關閉Socket....
//socket.close()
};
document.body.οnclick=function (){
console.log(123);
socket.send('I am the client and I\'m listening!');
}
一開始,我是通過python的client端來請求server端的,發現了每次send一個數據之后,連接就斷開了,至此讓我懷疑websocket的理解,因為一開始我理解的是,連接一次不應該斷開。但是這次的連接之后我發現websocket連接一次就斷了,我一度懷疑websocket就是一次性的連接。后來研究了很久,官網代碼看了一些,還是不行。最終我就使用了js來請求。因為很早之前就聽過swoole寫過PHP的websocket服務端,然后js請求,能不間斷發送消息。最終的結果很滿意,js能夠多次請求【之間還嘗試了好幾個例子,也是一次性的,很無奈】。通過js實現的client讓我更加確信websocket是可以長期連接的,并且期間可以不間斷發送數據。通過js的client的實現,我得出至少python的server端是沒有問題的。最后研究了client的代碼,在這上面下功夫,發現加一個while True就能實現了。【其實很無奈的,之前也試過while True的,而且嘗試過在不同位置寫,居然沒試出來,不知道為什么,也沒有代碼記錄】,總的來說,現在是完成了websocket的實現,對websocket的印象進一步加深了許多!
總結
以上是生活随笔為你收集整理的python长连接框架_python之websocket【长连接的实现】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql 时间范围查询_Excel中使用S
- 下一篇: python paramiko使用_使用