基于websocket搭建简易群聊
1.前端HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div style="width: 600px;">
<input type="text" id="username">
<button onclick="login()">登录聊天室</button>
</div>
<br>
<div style="width: 600px;">
给:<input type="text" id="to_user">
发送:<input type="text" id="msg">
<button onclick="send_msg()">发送</button>
</div>
<br>
<div id="chat_list" style="width: 600px;height: 300px;"></div> </body>
<script type="application/javascript">
var ws = null; function login() {
var username = document.getElementById("username").value;
// 打印当前登录用户名
console.log(username);
// 注意ws/,斜线不要忘记写
ws = new WebSocket("ws://192.168.13.21:5300/ws/" + username);
// 打印创建的socket链接
console.log(ws);
ws.onmessage = function (data) {
console.log(data.data);
var recv_msg = JSON.parse(data.data);
var ptag = document.createElement("p");
ptag.innerText = recv_msg.from_user + ":" + recv_msg.msg;
document.getElementById("chat_list").appendChild(ptag);
}
} function send_msg() {
var to_user = document.getElementById("to_user").value;
var msg = document.getElementById("msg").value;
var send_str = {
"to_user": to_user,
"msg": msg
};
ws.send(JSON.stringify(send_str));
}
</script>
</html>
2.后端PYTHON
from flask import Flask,render_template,request
from geventwebsocket.handler import WebSocketHandler
from geventwebsocket.websocket import WebSocket
from gevent.pywsgi import WSGIServer
import json app=Flask(__name__)
user_socket_list = []
user_socket_dict = {} @app.route("/ws/<username>")
def ws(username):
print('当前登录账号:',username)
user_socket = request.environ.get("wsgi.websocket") #type:WebSocket
if user_socket:
user_socket_dict[username] = user_socket
else:
pass
while 1:
msg = user_socket.receive()
msg_dict = json.loads(msg)
msg_dict["from_user"] = username
to_user = msg_dict.get("to_user")
u_socket = user_socket_dict.get(to_user) # type:WebSocket
u_socket.send(json.dumps(msg_dict)) @app.route("/")
def index():
return render_template("ws.html") if __name__ == '__main__':
http_serv = WSGIServer(("0.0.0.0",5300),app,handler_class=WebSocketHandler)
http_serv.serve_forever()




需要借助2个浏览器实现
基于websocket搭建简易群聊的更多相关文章
- WebSocket 实现链接 群聊(low low low 版本)
		py 文件: """ 下载 gevent-websocket 0.10.1 基于Flask + geventWebSocket 建立连接,发送消息,实现群消息功能. &q ... 
- 基于itchat的微信群聊小助手基础开发(一)
		前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在g ... 
- websocket学习和群聊实现
		WebSocket协议可以实现前后端全双工通信,从而取代浪费资源的长轮询.在此协议的基础上,可以实现前后端数据.多端数据,真正的实时响应.在学习WebSocket的过程中,实现了一个简化版群聊,过程和 ... 
- 基于WebSocket的简易聊天室
		用的是Flash + WebSocket 哦~ Flask 之 WebSocket 一.项目结构: 二.导入模块 pip3 install gevent-websocket 三.先来看一个一对一聊天的 ... 
- 基于nginx搭建简易的基于wcf集群的复杂均衡
		很多情况下基于wcf的复杂均衡都首选zookeeper,这样可以拥有更好的控制粒度,但zk对C# 不大友好,实现起来相对来说比较麻烦,实际情况下,如果 你的负载机制粒度很粗糙的话,优先使用nginx就 ... 
- php+websocket搭建简易聊天室实践
		1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ... 
- 使用Html5下WebSocket搭建简易聊天室
		一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ... 
- Tinychatserver: 一个简易的命令行群聊程序
		这是学习网络编程后写的一个练手的小程序,可以帮助复习socket,I/O复用,非阻塞I/O等知识点. 通过回顾写的过程中遇到的问题的形式记录程序的关键点,最后给出完整程序代码. 0. 功能 编写一个简 ... 
- 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)
		前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ... 
随机推荐
- spring学习笔记(四)
			1.aop编程 a.前置通知 .... <!-- 配置被代理的对象 --> <bean id="test1Service" class="com. ... 
- EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
			public static DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate< ... 
- 树莓派学习笔记——apt方式安装opencv
			0.前言 本文介绍怎样在树莓派中通过apt方式安装opencv.并通过一个简单的样例说明怎样使用opencv. 相比于源码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少 ... 
- poj2184 Cow Exhibition(p-01背包的灵活运用)
			转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=2184">http://poj.org/problem?id=2184 Descrip ... 
- java - day08 - PrimeNumLoop
			质数循环查找 package day07_addition; //范围查找质数 public class PrimeNumLoop { public static void main(String[] ... 
- java过滤四字节和六字节特殊字符
			java7版本中可以这样写: source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "* ... 
- hash和encrypt区别及应用_转
			转自:哈希(Hash)与加密(Encrypt)的基本原理.区别及工程应用 0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理 ... 
- nagios 安装
			#!/bin/sh ################################################ #this scripts is created by oldboy #site: ... 
- CVS 相关内容
			CVS 基础 cvs 并不是 eclipse 独有, 而是 eclipse 支持 cvs. cvs 是用于几个程序员之间共享程序避免冲突的一个工具, 是 C/S 架构. cvs 是 java 的一个开 ... 
- Eclipse 重构菜单
			Eclipse 重构菜单 使用Eclipse重构 在项目开发中我们经常需要修改类名,但如果其他类依赖该类时,我们就需要花很多时间去修改类名. 但 Eclipse 重构功能可以自动检测类的依赖关系并修改 ... 
