单聊

  1. from flask import Flask,request,render_template
  2. from geventwebsocket.handler import WebSocketHandler
  3. from gevent.pywsgi import WSGIServer
  4. from geventwebsocket.websocket import WebSocket
  5. import json
  6.  
  7. app = Flask(__name__)
  8.  
  9. user_socket_dict = {}
  10.  
  11. @app.route('/ws/<username>')
  12. def ws(username):
  13. user_socket = request.environ.get('wsgi.websocket') # type:WebSocket
  14. user_socket_dict[username] = user_socket
  15.  
  16. print(len(user_socket_dict),user_socket_dict)
  17.  
  18. while 1:
  19. try:
  20. msg = user_socket.receive()
  21. msg = json.loads(msg)
  22. to_user = msg.get('to_user')
  23. content = msg.get('msg')
  24. usocket = user_socket_dict.get(to_user)
  25. recv_msg = {
  26. 'from_user':username,
  27. 'msg':content
  28. }
  29.  
  30. usocket.send(json.dumps(recv_msg))
  31. except:
  32. pass
  33.  
  34. @app.route('/chat')
  35. def chat():
  36. return render_template('chat.html')
  37.  
  38. if __name__ == '__main__':
  39. http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler)
  40. http_serv.serve_forever()

python代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>单聊</title>
  6. </head>
  7. <body>
  8. <input type="text" id="username">
  9. <button onclick="open_ws()">连接服务器</button>
  10. <p>给:<input type="text" id="to_user"></p>
  11. <p>发送消息:<input type="text" id="msg"></p>
  12. <button onclick="send_msg()">发送</button>
  13. <div id="chat" style="width: 500px; height: 500px;"></div>
  14.  
  15. <script type="text/javascript">
  16. var ws = null;
  17. function open_ws() {
  18. var username = document.getElementById('username').value;
  19. ws = new WebSocket('ws://192.168.19.34:5000/ws/' + username);
  20. ws.onmessage = function (data) {
  21. var msg = JSON.parse(data.data);
  22. var ptag = document.createElement('p');
  23. ptag.innerText = msg.from_user + ':' + msg.msg;
  24. document.getElementById('chat').appendChild(ptag);
  25. };
  26. }
  27.  
  28. function send_msg() {
  29. var msg = document.getElementById('msg').value;
  30. var to_user = document.getElementById('to_user').value;
  31. var send_obj = {to_user:to_user,msg:msg};
  32. ws.send(JSON.stringify(send_obj));
  33. }
  34. </script>
  35. </body>
  36.  
  37. </html>

页面

群聊

  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. from flask import Flask,request,render_template
  4. from geventwebsocket.handler import WebSocketHandler
  5. from gevent.pywsgi import WSGIServer
  6. from geventwebsocket.websocket import WebSocket
  7. import json
  8.  
  9. app = Flask(__name__)
  10.  
  11. user_socket_list = []
  12.  
  13. @app.route('/ws')
  14. def ws():
  15. user_socket = request.environ.get('wsgi.websocket') # type:WebSocket
  16. user_socket_list.append(user_socket)
  17. print(len(user_socket_list),user_socket_list)
  18. while 1:
  19. try:
  20. msg = user_socket.receive()
  21. for usocket in user_socket_list:
  22. if usocket != user_socket:
  23. usocket.send(msg)
  24. except:
  25. user_socket_list.remove(user_socket)
  26.  
  27. @app.route('/chat')
  28. def chat():
  29. return render_template('ws.html')
  30.  
  31. if __name__ == '__main__':
  32. http_serv = WSGIServer(('0.0.0.0',5000),app,handler_class=WebSocketHandler)
  33. http_serv.serve_forever()

Python代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <p>发送消息:<input type="text" id="msg"></p>
  9. <button onclick="send_msg()">发送</button>
  10. <div id="chat" style="width: 500px;height: 500px;"></div>
  11. <script type="text/javascript">
  12. var ws = new WebSocket('ws://192.168.19.34:5000/ws');
  13. ws.onmessage = function (data) {
  14. var ptag = document.createElement('p');
  15. ptag.innerText = data.data;
  16. document.getElementById('chat').appendChild(ptag);
  17. };
  18.  
  19. function send_msg() {
  20. var msg = document.getElementById('msg').value;
  21. ws.send(msg)
  22. }
  23. </script>
  24. </body>
  25. </html>

页面

flask + websocket实现简单的单聊和群聊的更多相关文章

  1. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。

    上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...

  3. netty无缝切换rabbitmq、activemq、rocketmq实现聊天室单聊、群聊功能

    netty的pipeline处理链上的handler:需要IdleStateHandler心跳检测channel是否有效,以及处理登录认证的UserAuthHandler和消息处理MessageHan ...

  4. 基于netty实现单聊、群聊功能

    学习资料 https://juejin.im/book/5b4bc28bf265da0f60130116/section/5b6a1a9cf265da0f87595521 收获: 转载 1. Nett ...

  5. Flask实现简单的群聊和单聊

    Flask是使用python写的一个简单轻量级的框架,今天我们使用Flask实现一个简单的单聊和群聊功能 . 主要思路 : 前端登录聊天室,聊天室信息包含用户的登录信息,相当于一个登录功能,会把这个信 ...

  6. Websocket实现群聊、单聊

    Websocket 使用的第三方模块:gevent-websocket 群聊 ws群聊.py中的内容 from flask import Flask, request, render_template ...

  7. nodejs与websocket模拟简单的聊天室

    nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...

  8. Asp.net SignalR 应用并实现群聊功能 开源代码

    ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务 ...

  9. 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践

    本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...

随机推荐

  1. AntDesign vue学习笔记(一)初始化项目

    最近学习AntDesign组件使用,官方Pro例子集成度太高,不容易学习,将从最基础组件一个一个搭建. 1.创建Vue Cli项目 2.引入ant design组件 $ cnpm i --save a ...

  2. C# int uint long ulong byte sbyte float double decimal 范围,及类型!

    static void Main(string[] args) { Console.WriteLine(" byte {0,7:g}{1,32:g}{2,32:g}",typeof ...

  3. Java基础---Java环境配置

    java 下载:https://www.java.com/zh_CN/ 1.Java安装:jdk9 2. JAVA_HOME 环境变量的配置 在DOS命令行下使用这些工具,就要先进入到JDK的bin目 ...

  4. C++和c语言的区别

    在大家眼中c++与C语言很像,但两个有本质的区别,C语言是面向过程的,而C++是面向对象的,下面就给大家梳理梳理. 1.C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中:而C++ ...

  5. Delphi百度文字识别【支持通用文字识别、身份证识别、银行卡识别、驾驶证识别、行驶证识别、车牌识别等功能】

    作者QQ:(648437169) 点击下载➨Delphi百度文字识别          百度api文档 [Delphi百度文字识别]支持 通用文字识别.通用文字识别(高精度版).通用文字识别(含位置信 ...

  6. Linux环境下进程的CPU占用率

    阿里云服务器网站:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qqwovx6h 文字来源:http://www.s ...

  7. qt5信息提示框QMessageBox用法(很全)

    information QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes ...

  8. ELK学习笔记之配置logstash消费kafka多个topic并分别生成索引

    0x00 filebeat配置多个topic filebeat.prospectors: - input_type: log encoding: GB2312 # fields_under_root: ...

  9. virsh 添加虚拟交换机

    virsh 添加虚拟交换机 来源 https://blog.csdn.net/a1987463004/article/details/90905981 vim /etc/libvirt/qemu/ne ...

  10. centos7划分vlan

    1. lsmod|grep 8021q  确认内核是够载入了802.1q模组 2.modprobe -a 8021q   如果没载入使用这个命令载入模组 3.配置vlan需要vconfig命令,由于c ...