博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebSocket群聊与单聊
阅读量:6701 次
发布时间:2019-06-25

本文共 2534 字,大约阅读时间需要 8 分钟。

一 . WebSocket实现群聊

  py文件代码

# py文件from flask import Flask, render_template, requestfrom geventwebsocket.handler import WebSocketHandlerfrom geventwebsocket.websocket import WebSocketfrom geventwebsocket.exceptions import WebSocketErrorfrom gevent.pywsgi import WSGIServer  app = Flask(__name__)user_socket_list = []@app.route('/index')def index():    return render_template('index.html')@app.route('/my/ws')def my_ws():    # 当前端声明WebSocket的时候才有wsgi.websocket    user_socket = request.environ.get('wsgi.websocket')  # type:WebSocket   # 为了让下面user_socket点的时候有提示    user_socket_list.append(user_socket)    print(len(user_socket_list), user_socket_list)    while 1:        try:   # 下面用图解释为什么要try            msg = user_socket.receive()  # 阻塞等待发送信息        except WebSocketError:            user_socket_list.remove(user_socket)            return 'GoodBye'        for user in user_socket_list:            if user == user_socket:                continue            try:                user.send(msg)            except:                continueif __name__ == '__main__':    # 用下面这种方法启动是为了识别并支持websocket    http_server = WSGIServer(('0.0.0.0', 9527), app, handler_class=WebSocketHandler)    http_server.serve_forever()

  html代码

    
index

  不try的时候

     

 

  

  try之后  

  

二 . 单聊

  py文件

import jsonfrom flask import Flask, render_template, requestfrom geventwebsocket.handler import WebSocketHandlerfrom geventwebsocket.websocket import WebSocketfrom geventwebsocket.exceptions import WebSocketErrorfrom gevent.pywsgi import WSGIServerapp = Flask(__name__)user_socket_dict = {}@app.route('/home')def index():    return render_template('home.html')@app.route('/my/ws/
')def my_ws(username): user_socket = request.environ.get('wsgi.websocket') # type:WebSocket user_socket_dict[username] = user_socket print(len(user_socket_dict), user_socket_dict) while 1: try: msg = user_socket.receive() # 阻塞等待消息 # print(msg, type(msg)) msg_dict = json.loads(msg) to_user = msg_dict.get('to_user') to_user_socket = user_socket_dict.get(to_user) to_user_socket.send(msg) except WebSocketError: user_socket_dict.pop(username) return 'GoodBye'if __name__ == '__main__': http_server = WSGIServer(('0.0.0.0', 9527), app, handler_class=WebSocketHandler) http_server.serve_forever()

  html文件

    
Title

发送者

接受者

消息

  展示结果:

           

 

转载于:https://www.cnblogs.com/attila/p/10713901.html

你可能感兴趣的文章
SDK更新太慢
查看>>
2014年5月份
查看>>
Codeforces Round #257 (Div. 2/A)/Codeforces450A_Jzzhu and Children
查看>>
android 拍照注意问题
查看>>
form中的button按钮在IE11中自动提交表单问题导致弹出框关闭之后表单被重置
查看>>
在多个游戏视图间切换环境准备
查看>>
Linux命令-权限管理命令:chown
查看>>
【转】【MMX】 基于MMX指令集的程序设计简介
查看>>
Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
查看>>
第三方推送-使用推
查看>>
Hadoop 2.2.0 HA构造
查看>>
WIN8系统中 任务管理器 性能栏 显示CPU利用率(已暂停)怎么回事?
查看>>
java如何将毫秒数转为相应的年月日格式
查看>>
whu oj 1551 Pairs (莫队算法)
查看>>
BZOJ3424 : Poi2013 Multidrink
查看>>
eclipse 预览Android界面报错
查看>>
iOS:iOS开发系列–打造自己的“美图秀秀”(中)
查看>>
keepalived对nginx高可用演练脚本
查看>>
swift实现ios类似微信输入框跟随键盘弹出的效果
查看>>
MySQL索引背后的数据结构及算法原理
查看>>