zoukankan      html  css  js  c++  java
  • 使用genvent.socket实施群聊/单聊模式

    使用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>
  • 相关阅读:
    iphone在iframe页面的宽度不受父页面影响,避免撑开页面
    touch事件应用
    js获取手机屏幕宽度、高度
    css3特效样式库
    js基础:对DOM进行操作,删除、添加元素
    eval基础,基础用法及解析json
    ajax调用数据案例,二级联动
    (原)String类两种实例化的区别
    java订电影票系统
    多线程练习(java)
  • 原文地址:https://www.cnblogs.com/shicongcong0910/p/10976435.html
Copyright © 2011-2022 走看看