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/n/150241.html
 
 微信扫一扫
微信扫一扫  支付宝扫一扫
支付宝扫一扫 