A-A+

使用gevent-websocket实现websocket服务端程序

2016年07月28日 Python 评论 2 条 阅读 10,749 views 次

 

在之前写 python websocket网页实时显示远程服务器日志信息 中提到websocket服务端代码,除了用文章提到的代码外,还可以用以下的websocket代码

在使用这段python代码之前,先在安装以下模块:

pip install gevent-websocket

pip install gevent

pip install bottle

  1. from bottle import request, Bottle, abort
  2. from geventwebsocket import WebSocketError
  3. from gevent.pywsgi import WSGIServer
  4. from geventwebsocket.handler import WebSocketHandler
  5. app = Bottle()
  6. users = set()
  7. @app.get('/websocket/')
  8. def handle_websocket():
  9.     wsock = request.environ.get('wsgi.websocket')
  10.     users.add(wsock)
  11.     if not wsock:
  12.         abort(400, 'Expected WebSocket request.')
  13.     while True:
  14.         try:
  15.             message = wsock.receive()
  16.         except WebSocketError:
  17.             break
  18.         print u"现有连接用户:%s" % (len(users))
  19.         if message:
  20.             for user in users:
  21.                 try:
  22.                     user.send(message)
  23.                 except WebSocketError:
  24.                     print u'某用户已断开连接'
  25.     # 如果有客户端断开,则删除这个断开的websocket
  26.     users.remove(wsock)
  27. server = WSGIServer(("0.0.0.0", 8000), app,handler_class=WebSocketHandler)
  28. server.serve_forever()

 

这2篇文章的websocket服务端代码,都差不多,只是用的模块不一样而已,前者用的是bottle-websocket扩展包,此篇用的是gevent-websocket包

其实还可以用websocket,开发成一个聊天室的,很简单,只是html和javascripts要多开发点功能而已,有兴趣的自己试试

 

如何在python终端中调试呢,先要安装一个python的websocket-client包(pip install websocket-client),以下是相关的调试代码:

  1. >>> from websocket import create_connection
  2. >>> ws_server = "ws://192.168.1.221:8000/websocket/"
  3. >>> ws = create_connection(ws_server)
  4. >>> ws.send('hello,http://www.linuxyw.com')  #发送数据
  5. 34
  6. >>> ws.recv()  #获取数据
  7. 'hello,http://www.linuxyw.com'
  8. >>> ws.send('欢迎光临我的博客')
  9. 30
  10. >>> ws.recv()
  11. '\xe6\xac\xa2\xe8\xbf\x8e\xe5\x85\x89\xe4\xb8\xb4\xe6\x88\x91\xe7\x9a\x84\xe5\x8d\x9a\xe5\xae\xa2'

send("内容") :是发送数据给websocket服务端

recv() : 是从websocket服务端获取数据

 

如下图所示:

websocket实现效果

websocket实现效果

 

2 条留言  访客:1 条  博主:0 条   引用: 1 条

  1. avatar 匿名

    k啊

来自外部的引用: 1 条

  • 运维开发:python websocket网页实时显示远程服务器日志信息 | linux系统运维

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: