ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用genvent.socket实施群聊/单聊模式

2019-06-04 22:03:44  阅读:352  来源: 互联网

标签:__ 群聊 var genvent user chat 单聊 msg ws


使用genvent.socket实施群聊
from flask import Flask, request, render_template
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
from geventwebsocket.websocket import WebSocket

import json
user_dict = {}                           #设置一个公共变量
app = Flask(__name__)
@app.route('/ws/<username>')
def ws(username):
    user_socket = request.environ.get('wsgi.websocket')            #获取客户端的服务
    user_dict[username] = user_socket                  #将其存到公共变量中
    while True:
        msg = user_socket.receive()    #等待接受客户端数据        
        u_msg= {'from_user':username,'chat':msg}            #将接收的数据进行处理(处理成字典)
        for uname,usocket in user_dict.items():            #循环发送向每个服务器进行发送数据
            usocket.send(json.dumps(u_msg))
@app.route('/webchat')
def webchat():
    return render_template('wechats.html')


if __name__ == '__main__':
    server = WSGIServer(('0.0.0.0',9527),app,handler_class=WebSocketHandler)  #设置ip 以及端口 还有处理方式
    server.serve_forever()            #运行服务

html文件代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>姓名: <input type="text" id="username">
    <button onclick="open_ws()">登录</button></p>
<p>内容: <input type="text" id="message">
    <button onclick="send_msg()">发送</button></p>
<div id="chat_list"></div>

</body>
<script type="application/javascript">
    var ws = null;
    function open_ws(){
        var username = document.getElementById("username").value;
        ws = new WebSocket('ws://192.168.16.234:9527/ws/'+username);
        ws.onopen=function(){
            alert('欢迎登录');
        };
        ws.onmessage=function(eventMessage){
            var chat = JSON.parse(eventMessage.data);
            var p =document.createElement("p");
            p.innerText=chat.from_user+':'+chat.chat;
            document.getElementById('chat_list').appendChild(p);
        }
    }
    function send_msg(){
        var msg=document.getElementById('message').value;
        ws.send(msg)
    }
</script>
</html>

 

 

使用genvent.socket实施单聊模式

import json
from flask import Flask, request, render_template
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
user_dict = {}
app= Flask(__name__)
@app.route('/my_ws/<username>')
def my_ws(username):
    user_socket=request.environ.get('wsgi.websocket')
    print(user_socket)
    user_dict[username] = user_socket
    while True:
        msg = user_socket.receive()
        msg_dict=json.loads(msg)
        msg_dict['from_user'] = username
        to_user = msg_dict.get('to_user')
        usocket= user_dict.get(to_user)
        if not usocket:
            continue
        try:
            usocket.send(json.dumps(msg_dict))
        except:
            user_dict.pop(to_user)

@app.route('/wechat')
def wechat():
    return render_template('personal.html')

if __name__ == '__main__':
    server =WSGIServer(('0.0.0.0',9527),app,handler_class=WebSocketHandler)
    server.serve_forever()

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="chat_list"></div>
<p>你的名字<input type="text" id="username">
<button onclick="open_ws()">登录</button></p>
<p>给: <input type="text" id="to_user"></p>
<p><input type="text" id="message"> <button onclick="send_msg()">发送</button></p>

</body>
<script type="application/javascript">
    var ws = null;
    function open_ws() {
        var username = document.getElementById("username").value;
        ws = new WebSocket("ws://192.168.16.234:9527/my_ws/"+username);
        ws.onopen = function () {
            alert("欢迎登录");
        };
        ws.onmessage = function (eventMessage) {
            var chat = JSON.parse(eventMessage.data);
            var p = document.createElement("p");
            p.innerText = chat.from_user + ":" + chat.chat;
            document.getElementById("chat_list").appendChild(p);
        };
    }
    function send_msg() {
        var to_user = document.getElementById("to_user").value;
        var msg = document.getElementById("message").value;
        var send_str = {
          to_user:to_user,
          chat:msg
        };
        ws.send(JSON.stringify(send_str));

        var p = document.createElement("p");
        p.innerText = "我:" + msg;
        document.getElementById("chat_list").appendChild(p);
    }
</script>
</html>

 

标签:__,群聊,var,genvent,user,chat,单聊,msg,ws
来源: https://www.cnblogs.com/shicongcong0910/p/10976435.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有