当前位置:首页>python>不用互联网!我用Python写了点代码,搭了个聊天室,全家人都在用!

不用互联网!我用Python写了点代码,搭了个聊天室,全家人都在用!

  • 2026-10-11 08:02:01
不用互联网!我用Python写了点代码,搭了个聊天室,全家人都在用!

很多人都遇到过这样的场景:

  • 家里几台设备想快速互传信息
  • 办公室临时需要一个局域网聊天室
  • 学校机房想做一个多人协作消息板
  • 树莓派、小主机、NAS 想变成聊天服务器
  • 不想依赖微信、QQ、互联网

其实,只需要一个 Python 文件,就能搭建一个:

  • 局域网聊天室
  • 多设备实时通信网页
  • Markdown 聊天系统
  • 支持手机访问的聊天平台

而且:

  • 不需要数据库
  • 不需要安装复杂环境
  • 不需要公网
  • 不需要云服务器

只要同一个 WiFi 即可。


一、项目效果

聊天室具备:

  • 实时消息刷新
  • 多人在线聊天
  • 在线人数显示
  • Markdown 消息渲染
  • 不同用户不同颜色
  • 手机 / 平板 / PC 全兼容
  • 浏览器直接访问

例如:

http://192.168.1.23:8000

局域网其他设备打开即可进入聊天室。


二、普通用户篇:如何使用

这一部分适合:

  • 非程序员
  • 想快速部署
  • 想家庭 / 办公室使用
  • 想做局域网聊天

的用户。


1. 安装 Python

前往:

Python 官网

下载安装 Python 3。

安装时一定勾选:

Add Python to PATH

2. 保存代码

把聊天服务器代码保存为:

lan_chat_server.py

3. 启动服务器

双击运行,或者命令行:

python lan_chat_server.py

看到:

局域网聊天室启动成功

本机访问:
http://127.0.0.1:8000

局域网访问:
http://192.168.1.23:8000

说明已经成功。


4. 其他设备加入聊天

只需要:

  • 手机
  • 平板
  • 电脑

连接同一个 WiFi。

然后浏览器打开:

http://192.168.1.23:8000

即可进入聊天室。


5. 支持 Markdown

发送:

# 标题

**粗体**

```python
print("hello")
```

会自动渲染成富文本。


6. 在线人数实时变化

聊天室顶部会显示:

在线人数:5

打开页面自动上线。

关闭页面一段时间后自动离线。


7. 不同用户不同颜色

每个昵称会自动获得不同颜色:

  • 蓝色
  • 紫色
  • 绿色
  • 橙色

聊天时更容易区分消息来源。

开发者篇:代码设计解析


1. 整体架构

整个系统实际上只有:

Python HTTP Server
+
HTML
+
CSS
+
JavaScript

没有使用:

  • Flask
  • Django
  • Node.js
  • Vue
  • React

因此非常轻量。


2. Python 作为 Web Server

核心:

fromhttp.serverimportHTTPServer
fromhttp.serverimportBaseHTTPRequestHandler

Python 标准库自带 HTTP 服务能力。

服务器:

server=HTTPServer(
    ('0.0.0.0', 8000),
ChatHandler
)

其中:

0.0.0.0

表示:

监听所有网卡。

因此局域网设备可以访问。


3. HTTP 接口设计

整个聊天室只有几个接口:

接口
作用
/
返回聊天网页
/messages
获取消息
/send
发送消息
/online
在线心跳

这是一个非常典型的:

REST 风格

轻量 API。


4. 消息存储

消息直接保存在内存:

messages= []

每条消息:

{
"name": "用户",
"text": "消息",
"time": "12:30:00",
"color": "
#2196F3"
}

优点:

  • 极简
  • 无数据库
  • 快速

缺点:

  • 重启丢失
  • 不适合超大规模

5. 用户颜色算法

不同用户不同颜色:

hashlib.md5(name.encode())

通过用户名 hash:

idx=int(h, 16) %len(colors)

实现:

  • 相同昵称永远同颜色
  • 不需要数据库保存颜色

这是一个很经典的小技巧。


6. 在线人数实现

服务器维护:

online_users= {}

结构:

{
"Alice": 最后活跃时间,
"Bob": 最后活跃时间
}

前端每隔 5 秒发送一次:

heartbeat

服务器清理超时用户:

ifnow-v>USER_TIMEOUT:

因此实现:

  • 自动上线
  • 自动掉线
  • 实时在线人数

7. Markdown 渲染

前端引入:

<scriptsrc="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>

使用:

marked.parse(text)

把 Markdown 转成 HTML。


8. 为什么先 escapeHtml 再 Markdown?

这里是安全关键。

代码:

constsafeText=escapeHtml(m.text);
constmarkdownHtml=marked.parse(safeText);

这样可以防止:

<script>alert(1)</script>

被直接执行。

否则聊天室会存在:

XSS 攻击

风险。


9. 为什么不用 WebSocket?

当前版本使用:

轮询

即:

setInterval(loadMessages,1000);

每秒请求一次。

优点:

  • 简单
  • 兼容性高
  • 不依赖第三方库

缺点:

  • 并非真正实时
  • 人数多时压力增加

10. 下一步升级方向

这个项目其实已经接近:

局域网 IM 系统

后续可以升级:


WebSocket 真·实时聊天

替代轮询:

客户端 ←→ 服务器

实时推送。


SQLite 持久化

当前:

内存存储

升级后:

数据库存储

即可:

  • 永久保存聊天记录
  • 支持历史查询

文件上传

增加:

拖拽上传

即可变成:

局域网文件共享系统

图片聊天

支持:

  • 图片预览
  • 手机拍照上传
  • GIF
  • 表情包

私聊系统

结构升级:

rooms= {}
private_messages= {}

即可支持:

  • 私聊
  • 群组
  • 房间

AI 聊天机器人

甚至可以接入:

OpenAI

实现:

  • AI 群聊
  • AI 助手
  • AI 总结聊天记录

四、这个项目真正适合什么?

它非常适合:


家庭局域网

例如:

  • 家庭留言板
  • 平板聊天
  • NAS 消息系统

学校机房

例如:

  • 局域网讨论区
  • 课堂互动
  • 实验室通信

公司内网

例如:

  • 临时聊天室
  • 运维广播
  • 局域网通知系统

树莓派 / 小主机

例如:

  • 家庭服务器
  • 本地 IM
  • 离线聊天

一点彩蛋:

最新文章

随机文章