依赖:
pip install ws4py
pip install gevent
# -*- coding: utf-8 -*-
from gevent import monkey
monkey.patch_all()
import argparse
from ws4py.server.geventserver import WebSocketWSGIApplication, WSGIServer
from ws4py.websocket import EchoWebSocket
from ws4py import configure_logger
class BroadcastWebSocket(EchoWebSocket):
def opened(self):
app = self.environ['ws4py.app']
app.clients.append(self)
def received_message(self, m):
print(m) # m为从客户端接收的值
app = self.environ['ws4py.app']
for client in app.clients:
client.send('ok') # 给客户端发送响应
# def closed(self, code, reason="A client left the room without a proper explanation."):
# app = self.environ.pop('ws4py.app')
# if self in app.clients:
# app.clients.remove(self)
# for client in app.clients:
# try:
# client.send(reason)
# except:
# pass
class EchoWebSocketApplication(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.ws = WebSocketWSGIApplication(handler_cls=BroadcastWebSocket)
# keep track of connected websocket clients
# so that we can brodcasts messages sent by one
# to all of them. Aren't we cool?
self.clients = []
def __call__(self, environ, start_response):
"""
Good ol' WSGI application. This is a simple demo
so I tried to stay away from dependencies.
"""
environ['ws4py.app'] = self
return self.ws(environ, start_response)
if __name__ == '__main__':
configure_logger()
parser = argparse.ArgumentParser(description='Echo gevent Server')
parser.add_argument('--host', default='192.168.0.140') # 服务端ip
parser.add_argument('-p', '--port', default=9090, type=int) # 服务端端口
args = parser.parse_args()
server = WSGIServer((args.host, args.port), EchoWebSocketApplication(args.host, args.port))
server.serve_forever() # 死循环
参考: