Flask实现群聊

后端

from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket
from flask import Flask,request,render_template
user_socket_list = []
app = Flask(__name__)

@app.route("/conn_ws")
#http协议{‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘, ‘SERVER_SOFTWARE‘: ‘gevent/1.3 Python/3.7‘, ‘SCRIPT_NAME‘: ‘‘, ‘wsgi.version‘: (1, 0), ‘wsgi.multithread‘: False, ‘wsgi.multiprocess‘: False, ‘wsgi.run_once‘: False, ‘wsgi.url_scheme‘: ‘http‘, ‘wsgi.errors‘: <
#socket协议{‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘, ‘SERVER_SOFTWARE‘: ‘gevent/1.3 Python/3.7‘, ‘SCRIPT_NAME‘: ‘‘, ‘wsgi.version‘: (1, 0), ‘wsgi.multithread‘: False, ‘wsgi.multiprocess‘: False, ‘wsgi.run_once‘: False, ‘wsgi.url_scheme‘: ‘http‘, ‘wsgi.errors‘: <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘>, ‘SERVER_NAME‘: ‘6FBK8EBBBDZ159K‘, ‘SERVER_PORT‘: ‘9527‘, ‘REQUEST_METHOD‘: ‘GET‘, ‘PATH_INFO‘: ‘/conn_ws‘, ‘QUERY_STRING‘: ‘‘, ‘SERVER_PROTOCOL‘: ‘HTTP/1.1‘, ‘REMOTE_ADDR‘: ‘127.0.0.1‘, ‘REMOTE_PORT‘: ‘62890‘, ‘HTTP_HOST‘: ‘127.0.0.1:9527‘, ‘HTTP_CONNECTION‘: ‘keep-alive‘, ‘HTTP_CACHE_CONTROL‘: ‘max-age=0‘, ‘HTTP_UPGRADE_INSECURE_REQUESTS‘: ‘1‘, ‘HTTP_USER_AGENT‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36‘, ‘HTTP_ACCEPT‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘, ‘HTTP_ACCEPT_ENCODING‘: ‘gzip, deflate, br‘, ‘HTTP_ACCEPT_LANGUAGE‘: ‘zh-CN,zh;q=0.9‘, ‘HTTP_COOKIE‘: ‘session=bb1d56c2-aaa0-4188-aa1b-10920775eb49‘, ‘wsgi.input‘: <gevent.pywsgi.Input object at 0x0000000003A55948>, ‘werkzeug.request‘: <Request ‘http://127.0.0.1:9527/conn_ws‘ [GET]>}
def ws_app():
    user_socket = request.environ.get("wsgi.websocket")
    user_socket_list.append(user_socket)
    print(len(user_socket_list),user_socket_list)
    while True:
        msg = user_socket.receive()
        print(msg)
        for usocket in user_socket_list:
            usocket.send(msg)

@app.route("/")
def index():
    return render_template("web1.html")

if __name__ == ‘__main__‘:
    http_serv=WSGIServer(("0.0.0.0",9527),app,handler_class=WebSocketHandler)
    http_serv.serve_forever()

后端:

<body>
<input type="text" id="send_str">
<button id="send_btn" onclick="send()">发送消息</button>
<p>
<div id="chat_list">
</div>
</p>
</body>
<script type="application/javascript">
    var ws = new WebSocket("ws://192.168.11.135:9527/conn_ws")
    ws.onmessage = function (messageEvent) {
        console.log(messageEvent.data);
        var ptag = document.createElement("p");
        ptag.innerText = messageEvent.data;
        document.getElementById("chat_list").appendChild(ptag);
    }
    {#document.getElementById("send_btn").addEventListener("onclick")#}
   function send() {
        var send_str = document.getElementById("send_str").value;
        ws.send(send_str)
    }
</script>

原文地址:https://www.cnblogs.com/pythonz/p/10581941.html

时间: 2024-10-10 14:33:30

Flask实现群聊的相关文章

Flask 实现 WebSocket 通讯---群聊和私聊

一.WebSocket介绍 WebSocket是一种在单个TCP连接实现了服务端和客户端进行双向文本或二进制数据通信的一种通信的协议. WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输. 一次请求 - 服务器收到请求 开始和客户端握手 - 保持长连接 - 数据实时 - 连接永远保持 优点:长连接 并且不影响 收发请求 缺点:连接保

基于flask 写的web_socket 单聊和群聊

群聊 from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHandler from gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket app = Flask(__name__) user_socket_list = [] @app.route("/conn

websocket 群聊,单聊,加密,解密

群聊 from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket app = Flask(__name__) # type:Flask user_socket_list = [] @app

websocket实现群聊和单聊(转)

昨日内容回顾 1.Flask路由 1.endpoint="user" # 反向url地址 2.url_address = url_for("user") 3.methods = ["GET","POST"] # 允许请求进入视图函数的方式 4.redirect_to # 在进入视图函数之前重定向 5./index/<nid> # 动态参数路由 <int:nid> def index(nid) 6.str

使用genvent.socket实施群聊/单聊模式

使用genvent.socket实施群聊 from flask import Flask, request, render_template from gevent.pywsgi import WSGIServer from geventwebsocket.handler import WebSocketHandler from geventwebsocket.websocket import WebSocket import json user_dict = {} #设置一个公共变量 app

websocket-单群聊

简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议. WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输. Web - Socket  客户端 与 服务器 达成一个协议websocket 客户端 与 websocket 服务器 达成一个websocket协议 来个小例子方便大家理解: ws-socket.py fr

代码发布项目(二)——django实现websocket(使用channels)、基于channels实现群聊功能、gojs插件、paramiko模块

一.django实现websocket django默认是不支持websocket,只支持http协议 在django中如果想要基于websocket开发项目 你需要安装模块:channles pip3 install channels==2.3 版本不要使用最新的,如果安装最新的可能会自动把你的django版本升级到最新版 对应的解释器环境建议使用3.6(官网的说法:3.5可能有问题,3.7可能也有问题...具体原因没有给解释) channels模块内部已经帮我们封装好了 握手/加密/解密 面

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

基于itchat的微信群聊小助手基础开发(一)

前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在github上作者已经给出基本的操作,本博文只对附加的功能进行说明总结. 确保已经了解itchat的基本操作,先对功能1和功能2进行说明: 1.图灵机器人功能 该功能也是最基础的功能之一,itchat的基础案例也有相关例子. 图灵机器人简单而言就是以一定的规则给图灵的服务器发送数据包,图灵的服务器会以