您的位置:

Python WebSocket服务器端详解

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服务器端的理想选择。