websocket实现单聊
server
# @File: ws from flask import Flask, request, render_template
from geventwebsocket.handler import WebSocketHandler
from geventwebsocket.websocket import WebSocket # 我用来做语法提示
from gevent.pywsgi import WSGIServer
import json app = Flask(__name__) # type:Flask # 存放用户对应的,收件人,发件人,以及信息
# 可以做聊天室 {聊天室id:[], 聊天室id:[]...}
# 两个用户之间的聊天{"用户名":{信息}, "用户名":{信息}}
user_socket_dict = {} # type:dict @app.route('/')
def index():
return render_template('single.html') @app.route("/ws/<user>")
def ws(user):
user_socket = request.environ.get('wsgi.websocket') # type:WebSocket
if user_socket:
user_socket_dict[user] = user_socket
print(len(user_socket_dict), user_socket_dict)
while 1:
msg = user_socket.receive()
print(msg) # b"{from_user:xx, to_user:xx,msg:xx}"
msg_dict = json.loads(msg)
to_usocket = user_socket_dict.get(msg_dict.get("to_user")) # type:WebSocket
to_usocket.send(json.dumps({"from_user": user, "to_user": msg_dict.get("to_user"), "msg": msg_dict.get("msg")})) if __name__ == '__main__':
http_server = WSGIServer(("0.0.0.0", 5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
single.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<p>您的昵称:<input type="text" id="nick">
<button onclick="openws()">进入聊天室</button>
</p>
<p>给<input type="text" id="to_user">发送:<input type="text" id="message">
<button onclick="send_msg()">发送消息</button>
</p>
<div id="msg_list" style="width: 500px;"> </div>
</body>
<script type="application/javascript">
var ws = null;
// ws.onopen = function(){
// alert("欢迎来到S14群喷");
// }; function openws() {
var nick = document.getElementById("nick").value;
ws = new WebSocket("ws://192.168.12.41:5000/ws/" + nick);
ws.onmessage = function (ws_status) {
console.log(ws_status.data);
var msg_obj = JSON.parse(ws_status.data);
var ptag = document.createElement("p");
ptag.innerText = msg_obj.from_user + " : " + msg_obj.msg;
document.getElementById("msg_list").appendChild(ptag);
};
} function send_msg() {
var msg = document.getElementById("message").value;
var from_user = document.getElementById("nick").value;
var to_user = document.getElementById("to_user").value;
var ptag = document.createElement("p");
ptag.style.cssText = "text-align: right;";
ptag.innerText = msg + " : " + from_user;
document.getElementById("msg_list").appendChild(ptag);
var msg_obj = {
msg: msg,
from_user: from_user,
to_user: to_user
};
ws.send(JSON.stringify(msg_obj));
}; </script>
</html>
websocket实现单聊的更多相关文章
- websocket 实现单聊群聊 以及 握手原理+加密方式
WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...
- 基于websocket的单聊.群聊
关于ai.baidu.com的 代码: #########################################核心代码################################### ...
- 使用websocket实现单聊和多聊
单聊: 前端: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=& ...
- WebSocket群聊与单聊
一 . WebSocket实现群聊 py文件代码 # py文件 from flask import Flask, render_template, request from geventwebsock ...
- websocket 群聊单聊
websocket 介绍 介绍引自 https://segmentfault.com/a/1190000012709475 群聊 from flask import Flask, request, r ...
- websocket 群聊,单聊,加密,解密
群聊 from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHan ...
- Websocket实现群聊、单聊
Websocket 使用的第三方模块:gevent-websocket 群聊 ws群聊.py中的内容 from flask import Flask, request, render_template ...
- 如何用WebSocket实现一个简单的聊天室以及单聊功能
百度百科中这样定义WebSocket:WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端.简单的说,We ...
随机推荐
- javascript模块化编程:CommonJS和AMD规范
AMD规范,异步模块定义.与CommonJS规范齐名并列. 作用都是利于JavaScript的模块化编程. 模块化编程的好处就是: 1.可重用 2.独立 3.能解决加载的依赖性问题 4.能解决重复加载 ...
- js弹出QQ对话框在线交谈
<div style="position:absolute; top:110px; right:220px; z-index:2;"> <a target=&qu ...
- POJ 2482 Stars in Your Window(线段树+扫描线)
题目链接 非常不容易的一道题,把每个点向右上构造一个矩形,将问题转化为重合矩形那个亮度最大,注意LL,注意排序. #include <cstdio> #include <cstrin ...
- LiberOJ#6178. 「美团 CodeM 初赛 Round B」景区路线规划 概率DP
题意 游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环).每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他 ...
- Thread Runnable 区别
[线程的并发与并行] 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(co ...
- 使用POCO发送HTTP(S)请求
POCO GitHub地址https://github.com/pocoproject/poco http_example.cpp #include <iostream> #include ...
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- POJ2728 Desert King —— 最优比率生成树 二分法
题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS Memory Limit: 65536K Total Subm ...
- WinDbg设置托管进程断点
WinDbg的Live模式调试..Net 托管代码 ,使用bp,bu,bm无法设置断点,也许是我不会.研究了下,托管代码有自己的命令,!BPMD 模块名 完全限定的方法名 步骤: 1.查找进程PID, ...
- DEDE自定义表单显示提交时间|添加提交时间,获取ip的方法
前提是后台自定义表单字段一定要有 “时间”,这里的acca_time <div class="tit">*咨询内容:</div> <div clas ...