疫情期间,先来无事,鼓捣些小玩意,本次介绍下python匿名聊天室实现
1.看效果


实现起始比较简单,主要是使用websocke实现前后端通信而已:
先看下前端代码:

 <script>var socket = new WebSocket("ws://192.168.96.128:5000/message");socket.onmessage = function (event) {try {message = JSON.parse(event.data)if (message["mine"] == true) {chat_mine()} else {chat_other()}if (message["type"] == "login" ||message["type"] == "logout") {insertHTML = "<div class='sys'>" +"<span id='bsay'>" + message["text"] + "</span></div>"$(".talk_show").append(insertHTML)}} catch (e) {console.log(e)console.log(event)}};function chat_mine() {if (message["type"] == "chat") {insertHTML = "<div class='btalk'>" +"<span id='bsay'>" + message["ip"] + "-" + message["time"] + ":<br>" + message["text"] + "</span></div>"$(".talk_show").append(insertHTML)}}function chat_other() {if (message["type"] == "chat") {insertHTML = "<div class='atalk'><span id='asay'>" + message["ip"] + "-" + message["time"] + ":<br>" + message["text"] + "</span></div>"console.log(insertHTML)$(".talk_show").append(insertHTML)}}$(function () {$("#talksub").click(function () {//展示信息在屏幕上message = $("#talkwords").val()socket.send(message)$("#talkwords").val("")})})function InputPress() {if (event.keyCode == 13) {message = $("#talkwords").val()socket.send(message)$("#talkwords").val("")}}</script>

后端处理websocker消息的代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-from tornado.websocket import WebSocketHandler
from tornado.web import RequestHandler
import logging
import sys
import datetime
import jsonclients = dict()LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(level=logging.INFO, stream=sys.stdout, format=LOG_FORMAT)class ChatHandler(WebSocketHandler):def open(self):# 获取客户端IP信息self.id = self.request.remote_ip# 如果链接加入,clients[self.id] = {"id": self.id, "object": self}logging.info("客户端[%s]加入聊天室", self.request.remote_ip)# 消息通知各个客户端,某个IP客户端加入聊天室for client in clients.values():client['object'].write_message(self.package_message(client["id"], "login", "客户端[%s]登录聊天室" % self.id))pass# 处理接收的消息def on_message(self, data):logging.info("客户端[%s]说[%s]", self.request.remote_ip, data)# 服务端接受到消息,转发消息到其余客户端for client in clients.values():client['object'].write_message(self.package_message(client["id"], "chat", data))passdef data_received(self, chunk: bytes):print(str(chunk, encoding="utf-8"))passdef on_close(self):if self.id in clients:del clients[self.id]# 消息通知各个客户端,某个IP客户端加入聊天室for client in clients.values():client['object'].write_message(self.package_message(client["id"], "logout", "客户端[%s]退出聊天室" % self.id))passdef check_origin(self, origin):return True  # 允许WebSocket的跨域请求# 通信消息组装def package_message(self, ip, type, content):message = dict()message["type"] = typemessage["ip"] = self.idmessage["time"] = datetime.datetime.now().strftime("%H:%M:%S")message["text"] = contentmessage["mine"] = self.id == ipreturn messageclass IndexHandler(RequestHandler):def get(self):self.render("index.html")

当前这个版本还是比较简易的,还需要进行优化,不过能够反映大致的思路

线上演示地址如下:
http://182.92.152.248:5000/
登录聊天室回复:源码 返回源码地址

python+websocket匿名聊天室实现相关推荐

  1. Python用tornado的websocket开发聊天室

    Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...

  2. 基于python实现的聊天室(客户端:一)窗口设置

    前言 就是自己想用python做一个聊天室,然后看看socket库,websocket库,有点底层,然后也会用到协程的东西,不是很明白,一时间也不知道怎么写,因为前面使用过了flask-socketi ...

  3. 基于python实现的聊天室(服务端)

    前言 就是自己想用python做一个聊天室,然后看看socket库,websocket库,有点底层,然后也会用到协程的东西,不是很明白,一时间也不知道怎么写,然后就用了封装好的python-socke ...

  4. 基于django channel 实现websocket的聊天室

    websocket ​ 网易聊天室? ​ web微信? ​ 直播? 假如你工作以后,你的老板让你来开发一个内部的微信程序,你需要怎么办?我们先来分析一下里面的技术难点 消息的实时性? 实现群聊 现在有 ...

  5. 视频教程-基于Java的WebSocket的聊天室-Java

    基于Java的WebSocket的聊天室 多年 Java 企业级应用开发工作经验,曾参与中国人寿.华夏人寿.泰康人寿.信达财险等保险行业内部业务管理系统以及线上在线产品的开发:参与中国人民银行.清华大 ...

  6. 基于WebSocket实现聊天室(Node)

    基于WebSocket实现聊天室(Node) WebSocket是基于TCP的长连接通信协议,服务端可以主动向前端传递数据,相比比AJAX轮询服务器,WebSocket采用监听的方式,减轻了服务器压力 ...

  7. java开发websocket聊天室_java实现基于websocket的聊天室

    [实例简介] java实现基于websocket的聊天室 [实例截图] [核心代码] chatMavenWebapp └── chat Maven Webapp ├── pom.xml ├── src ...

  8. SpringBoot + Vue 实现基于 WebSocket 的聊天室(单聊)

    前言 在前一篇文章SpringBoot 集成 STOMP 实现一对一聊天的两种方法中简单介绍了如何利用 STOMP 实现单聊,本文则将以一个比较完整的示例展示实际应用,不过本文并未使用 STOMP,而 ...

  9. 将“闲聊么”改造成匿名聊天室

    关于闲聊么 之前的文章早已有介绍,详见"闲聊么"给你的网站加上一个聊天框. 不过啊,它有一个致命的弱点,必须注册登录才能参与聊天.对于小网站来说,很是鸡肋.一般人看到这么麻烦就放弃 ...

  10. SSM(五)基于webSocket的聊天室

    SSM(五)基于webSocket的聊天室 前言 不知大家在平时的需求中有没有遇到需要实时处理信息的情况,如站内信,订阅,聊天之类的.在这之前我们通常想到的方法一般都是采用轮训的方式每隔一定的时间向服 ...

最新文章

  1. 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
  2. zabbix监控超详细搭建过程
  3. 统计函数——汇总统计时间类数据
  4. Navicate Premium连接Oracle数据库报错
  5. java studentmanager_StudentManager.java
  6. UI设计素材模板|设计良好的教育网站:3个快捷技巧
  7. 用户与计算机系统的交互换界面,人机交互期末PPT复习(GXNU李智老师)
  8. mysql双机热备的配置步骤
  9. 房产纠纷官司费用是多少
  10. 爬虫_4、requests的post方法以及json字符串处理
  11. java程序设计实用教程 实验6答案_java程序设计实用教程习题解答与实验指导.doc...
  12. MySQL数据库学习路径 链接汇总
  13. yolov3原理解析及代码流程
  14. linux编译 __stdcall,Linux下的stdcall 约定格式
  15. VBA实现多条件查询
  16. docker 中文文档
  17. 不定式和动名词复合结构是什么
  18. Zabbix内网监控外网阿里云主机
  19. 基于云服务创建实时运营数据分析服务(二)
  20. 郝萌主的微信公众号上线了

热门文章

  1. 【无代码体验】宜搭车辆管理系统模板试用
  2. 光线cms,如何增加像百度一样的智能提示
  3. 集合20210801
  4. 广西移动摇一摇送话费_跟大家分享一个今天碰见的中国移动中奖坑钱套路
  5. maven安装以及本地创库设置
  6. Android仿微信视频聊天窗口,Android仿微信语音聊天界面设计
  7. jetbrain account不能访问的问题
  8. JetBrain IDEA 文件自动定位到打开文件位置
  9. 华为电脑linux怎么切换输入法,华为平板键盘怎么切换中文输入法
  10. 看台湾制造业目前发展概况如何?