今天來學(xué)習(xí)使用Python中的 flask 和 flask_sockets 來搭建一個(gè)簡單的Server-Client 服務(wù)毅厚。
Server 端
首先是Flask-Sockets 官網(wǎng),還有 Github
官方對(duì)Flask-Sockets 的介紹十分簡單:
Project description
Elegant WebSockets for your Flask apps.
Flask-Sockets是Flask框架的一個(gè)擴(kuò)展,通過它,F(xiàn)lask應(yīng)用程序可以優(yōu)雅地使用WebSocket服務(wù)挨决。
注意:Flask-Sockets和Flask-SocketIO是兩個(gè)不同的Flask擴(kuò)展庫
Flask-Sockets 僅僅將WebSocket協(xié)議進(jìn)行包裝弥喉,只能使用WebSocket服務(wù)允青;
Flask-SocketIO 不僅包裝了WebSocket協(xié)議兔沃,很可以實(shí)現(xiàn)其他更多的功能蒋得。
開始運(yùn)行程序前,需要安裝Python的兩個(gè)庫: flask
和 flask-sockets
:
安裝命令:
pip install flask
pip install flask-sockets
然后按照github上面的demo就可以創(chuàng)建一個(gè)server了:
from flask import Flask
from flask_sockets import Sockets
app = Flask(__name__)
sockets = Sockets(app)
# socket 路由粘拾,訪問url是: ws://localhost:5000/echo
@sockets.route('/echo')
def echo_socket(ws):
while not ws.closed:
message = ws.receive()
ws.send("come from web server: " + str(message))
# http 路由窄锅,訪問url是: http://localhost:5000/
@app.route('/')
def hello():
return 'Hello World!'
if __name__ == "__main__":
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
print("web server start ... ")
server.serve_forever()
if __name__ == "__main__":
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
print("web server start ... ")
server.serve_forever()
執(zhí)行這個(gè)python程序就可以啟動(dòng)server了
在瀏覽器輸入:http://localhost:5000/
就可以訪問 根路由 "/" 了创千,返回的消息是'Hello World!'
這樣就可以驗(yàn)證Server端正常運(yùn)行了缰雇。
Client 端
Client 端 通過 websocket-client
這個(gè)庫也可以非常簡單的實(shí)現(xiàn)
from websocket import create_connection
# 通過socket路由訪問
ws = create_connection("ws://localhost:5000/echo")
ws.send("Hello, linyk3")
result = ws.recv()
print(result)
ws.close()
上面代碼中import
的是 webcket
, 但是在pip安裝Python庫的時(shí)候入偷,如果是安裝 websocket
,會(huì)提示報(bào)錯(cuò):
實(shí)際上需要安裝的是 websocket-client
當(dāng)Server端正常運(yùn)行是械哟,實(shí)現(xiàn)Client程序疏之,通過結(jié)果可以知道Server-Client兩端的交互是通的: