在開始我們的程式**之前,先來了解一下相關的基礎知識:
1、什麼是websocket?
(1)websocket是html5開始提供的一種在單個 tcp 連線上進行全雙工通訊的協議。websocket通訊協議於2023年被ietf定為標準rfc 6455,websocketapi被w3c定為標準;
(2)在websocket api中,瀏覽器和伺服器只需要做乙個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送;
(3)現在,很多**為了實現推送技術,所用的技術都是輪詢。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對伺服器發出http request,然後由伺服器返回最新的資料給客戶端的瀏覽器。這種傳統的模式帶來很明顯的缺點,即瀏覽器需要不斷的向伺服器發出請求,然而http request的header是非常長的,裡面包含的資料可能只是乙個很小的值,這樣會占用很多的頻寬和伺服器資源;
(4)而比較新的技術去做輪詢的效果是comet,使用了ajax。但這種技術雖然可達到雙向通訊,但依然需要發出請求,而且在comet中,普遍採用了長鏈結,這也會大量消耗伺服器頻寬和資源;
(5)面對這種狀況,html5定義了websocket協議,能更好的節省伺服器資源和頻寬並達到實時通訊。
2、web socket優點
(1)伺服器與客戶端之間交換的資料報檔頭很小,大概只有2位元組;
(2)伺服器可以主動傳送資料給客戶端。
3、gevent-websocket介紹;
(1)是使用gevent封裝的websocket庫;
(2)可以很方便和其他網路框架結合。
好啦,了解以上的基礎知識,就開始我們的簡單的聊天室**之路吧!
test.py
from flask import實現的頁面如下:flask,render_template,request
from geventwebsocket.handler import
websockethandler
from geventwebsocket.websocket import
websocket
from gevent.pywsgi import
wsgiserver
import
json
)user_socket_list =
user_socket_dict ={}
"/ws/")
defws(username):
print(11111,request.environ)
user_socket = request.environ.get("
wsgi.websocket
") #
type:websocket
ifuser_socket:
user_socket_dict[username] =user_socket
(len(user_socket_dict),user_socket_dict)
while 1:
msg = user_socket.receive() #
收件人 訊息 發件人
>登入聊天室
button
>
給<
input
type
="text"
id="to_user"
>傳送:<
input
type
="text"
id="msg"
>
<
button
onclick
="send_msg()"
>傳送
button
>
<
div
id="chat_list"
style
="width: 500px;height: 500px;"
>
div>
body
>
<
script
type
>
varws
=null;
function
login()
} function
send_msg() ;
ws.send(json.stringify(send_str));
}script
>
html
>
實變函式 實分析總結
一 概述。實變函式,又叫實分析,整本書滿滿的證明就講了乙個勒貝格積分。最為大家所熟知的是用牛頓 萊布尼茨公式算的黎曼積分。但是黎曼積分本身依賴於函式的連續性,像不連續的狄利克雷函式就無法積分了。為了解決這一問題,勒貝格利用分割值域的方法,使得函式可積。但是分割出來的值域,只能放在一起,形式集合。如果...
NestedScrollWebview實現與優化
nestedscrollwebview實現與優化 原文如下 好久沒寫了,好像也沒什麼人關注我,呵呵,但我還是堅持寫一下,希望能幫到有需要的人!今天我來說一下nestedscrollwebview。最近在弄乙個需求,我需要用到coordinatorlayout webview 實現滾動互動效果,但要實...
saltstack keepalived實現高可用
本篇部落格承接saltstack安裝部署和saltstack grains,pillar,jinja模組的使用 建立目錄。root server1 keepalived vim files keepalived.conf configuration file for keepalived globa...