单聊:

  前端:

<!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("欢迎来到群喷");
// }; function openws(){
var nick = document.getElementById("nick").value;
ws = new WebSocket("ws://192.168.12.10: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>

  后端:

from flask import Flask,request,render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
import json from geventwebsocket.websocket import WebSocket app = Flask(__name__)
user_socket_dict = { } @app.route('/ws/<user>')
def ws(user):
user_socket = request.environ.get('wsgi.websocket') #原请求
if user_socket:
user_socket_dict[user] = user_socket while 1:
msg = user_socket.receive()
msg_dict = json.loads(msg)
to_usocket = user_socket_dict.get(msg_dict.get("to_user"))
to_usocket.send(json.dumps({"from_user": user, "to_user": msg_dict.get("to_user"), "msg": msg_dict.get("msg")})) @app.route("/")
def index():
return render_template("ws_one.html") if __name__ == '__main__':
# app.run("0.0.0.0",5000,debug=True)
http_serv = WSGIServer(("0.0.0.0", 5000), app, handler_class=WebSocketHandler)
http_serv.serve_forever()

多聊:

  前端

<!DOCTYPE html>
<html lang="zn-CN">
<head>
<meta 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="message"> <button onclick="send_msg()">发送消息</button></p>
<div id="msg_list" style="width: 500px"></div>
</body> <script type="application/javascript">
var ws = new WebSocket("ws://192.168.12.10:5000/ws");
// ws.onopen = function(){ //当打开的时候发送消息
// ws.send('hello')
// };
ws.onmessage = function (ws_status) {
console.log(ws_status.data);
var ptag = document.createElement('p');
ptag.innerText = ws_status.data;
document.getElementById('msg_list').appendChild(ptag)
};
function send_msg() {
var msg = document.getElementById('message').value;
var ptag = document.createElement('p');
ptag.style.cssText = 'text-align:right;';
ptag.innerText = msg;
document.getElementById('msg_list').appendChild(ptag)
ws.send(msg)
} </script>
</html>

  后端:

from flask import Flask,request,render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from geventwebsocket.websocket import WebSocket app = Flask(__name__) user_socker_list = []
@app.route('/ws')
def ws():
user_socker = request.environ.get('wsgi.websocket') #type:WebSocket
if user_socker:
user_socker_list.append(user_socker)
print(len(user_socker_list), user_socker_list)
while 1:
msg = user_socker.receive()
print(msg)
for usocker in user_socker_list:
if user_socker == usocker:
continue
try:
usocker.send(msg)
except:
continue
@app.route('/')
def index():
return render_template('ws_all.html') if __name__ == '__main__':
# app.run(debug=True)
http_serv = WSGIServer(("0.0.0.0",5000),app,handler_class=WebSocketHandler)
http_serv.serve_forever()

使用websocket实现单聊和多聊的更多相关文章

  1. websocket 实现单聊群聊 以及 握手原理+加密方式

    WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...

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

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

  3. flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密

    1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...

  4. 基于websocket的单聊.群聊

    关于ai.baidu.com的 代码: #########################################核心代码################################### ...

  5. flask + websocket实现简单的单聊和群聊

    单聊 from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHand ...

  6. websocket实现单聊

    server# @File: ws from flask import Flask, request, render_template from geventwebsocket.handler imp ...

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

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

  8. happyChat开发系列:使用websocket.io实现双向通信的乐聊大前端开发

    一.前言 乐聊是一个自己用websocket写一个完整的应用,虽然功能比较欠缺,但是实现了基本的文字聊天,以及群聊,私聊,机器人聊天等功能.因为这个自己做了PC端,无线端(手机端),以及使用cordo ...

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

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

随机推荐

  1. Day6 - I - Sticks Problem POJ - 2452

    Xuanxuan has n sticks of different length. One day, she puts all her sticks in a line, represented b ...

  2. SQL——左连接(Left join)右连接(Right join)内连接(Inner join)

    概念(定义) ​首先还是介绍一下这三个的定义 ​Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来.结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足 ...

  3. 使用 HTML5 视频事件

    转自:http://msdn.microsoft.com/zh-cn/library/hh924822(v=vs.85).aspx 为什么要使用事件? HTML5 视频对象提供了很多事件,这些事件可以 ...

  4. BFPRT(中位数的中位数算法)

    BFPRT(中位数的中位数算法) 类似于快排,但是划分区间的策略不一样. 分组,组内排序: 取出每组的中位数组成一个数组,再取这个数组的中位数: 以取出的中位数作为partition的轴.

  5. Netty的出现

    原生NIO存在的问题 NIO的类库和API复杂, 使用麻烦: 需要熟练掌握Selector.ServerSocketChannel.SocketChannel.ByteBuffer 等. 需要具备其他 ...

  6. Web UI设计师需要了解的用栅格化系统指导网页设计

    出处:https://www.jianshu.com/p/9838f217f4f6 致敬,,, ---------------------------------------------------- ...

  7. 2的n次幂

    位运算判断2的n次幂: 举个栗子,n = 8:则二进制表示就为1000,n-1则为 0111 取&刚好等于0 嘿嘿,巧妙吧. 再举个栗子,n = 7: 则二进制为 0111,n-1则为0110 ...

  8. 每天一点点之python - 基础语法

    1.字符串的拼接 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 输出结果如下: 可以通过和c语言一样,也可以通过format()来实现 2.简单运 ...

  9. 九十三、SAP中ALV事件之七,对自己定义的工具栏进行添加和删改

    一.我们来到工具栏页面,如果不想要某个工具栏,删掉相应的文字再双击空白就可以了 二.我们添加一个工具栏,如ZADD,双击文字 三.保存静态文本,会弹出一个功能文本框 四.填写相应的内容后,点击对勾保存 ...

  10. 107-PHP类成员属性赋值

    <?php class mao{ //定义猫类 public $age; //定义多个成员属性 protected $weight; private $color; } $mao1=new ma ...