WebSockets是HTML5中新添加的協議,使得雙向通信得以實現,類似於傳統的套接字。Python是一種高級編程語言,具有可擴展性和易讀性等特性,使其成為了實現WebSockets服務器端的理想選擇。這篇文章將從多個方面介紹Python WebSocket服務器端。
一、WebSocket介紹
WebSocket是一種在單個TCP套接字上進行全雙工通信的協議。它使得數據可以在客戶端和服務器之間進行雙向傳輸,服務器可以在任何時候向客戶端推送新的消息。
WebSocket 協議建立在HTTP協議之上,使用HTTP的握手請求,服務器來響應客戶端的請求,並實現從HTTP協議到WebSocket協議的升級
二、Python WebSocket庫
Python有很多WebSocket庫,這裡我們介紹三個:Tornado、Twisted和WebSocket-Server。
Tornado
import tornado.websocket
class EchoWebSocket(tornado.websocket.WebSocketHandler):
def open(self):
print("WebSocket 開啟")
def on_message(self, message):
self.write_message(u"收到消息: " + message)
Twisted
from twisted.internet import protocol, reactor
from twisted.web.server import Site
from twisted.web.static import File
from twisted.python import log
import sys
from autobahn.twisted.websocket import WebSocketServerProtocol
from autobahn.twisted.websocket import WebSocketServerFactory
class MyServerProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("WebSocket 連接來自 {}".format(request.peer))
def onOpen(self):
print("WebSocket 連接開啟")
def onMessage(self, payload, isBinary):
if isBinary:
print("Binary message received: {0} bytes".format(len(payload)))
else:
print("Text message received: {0}".format(payload.decode('utf8')))
# 反彈回去
self.sendMessage(payload, isBinary)
def onClose(self, wasClean, code, reason):
print("WebSocket 連接關閉")
if __name__ == '__main__':
factory = WebSocketServerFactory(u"ws://127.0.0.1:9000")
factory.protocol = MyServerProtocol
reactor.listenTCP(9000, factory)
reactor.run()
WebSocket-Server
from websocket_server import WebsocketServer
# 當一個消息被接收後觸發該函數。
def new_client(client, server):
print("WebSocket 連接來自 {}".format(client['address']))
# 創建 WebSocket 服務器。
server = WebsocketServer(8080, host='127.0.0.1')
# 綁定 "new_client" 函數。
server.set_fn_new_client(new_client)
# 啟動 WebSocket 服務器並保持打開狀態。
server.run_forever()
三、使用WebSocket在Python服務器端與客戶端通信
WebSocket是實現實時通信的一個好方法,下面是使用Python WebSocket-Server庫實現的一個例子:
import time
from websocket_server import WebsocketServer
# 當一個WebSocket消息接收到時觸發該函數。
def message_received(client, server, message):
print("WebSocket消息,來自 {}: {}".format(client['address'], message))
server.send_message(client, "I got your message: " + message)
# 如果有一個WebSocket客戶端連接,則調用該函數。
def new_client(client, server):
print("有一個新的WebSocket客戶端連接來自 {}:{}".format(client['address'][0], client['address'][1]))
server.send_message_to_all("有一個新的WebSocket客戶端連接來自 {}:{}".format(client['address'][0], client['address'][1]))
# 等待 WebSocket 連接。
server = WebsocketServer(8080, host='127.0.0.1')
server.set_fn_new_client(new_client)
server.set_fn_message_received(message_received)
server.run_forever()
四、總結
本文介紹了Python WebSocket服務器端,從WebSocket協議、Python WebSocket庫以及實現WebSocket在Python服務器端與客戶端通信三個方面進行了闡述。WebSockets是實現實時通信的重要技術,Python作為一種高級編程語言,具有可擴展性和易讀性等特點,使其成為實現WebSockets服務器端的理想選擇。
原創文章,作者:WZIY,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150241.html
微信掃一掃
支付寶掃一掃