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