使用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>

原文地址:https://www.cnblogs.com/shicongcong0910/p/10976435.html

时间: 2024-07-29 08:18:39

使用genvent.socket实施群聊/单聊模式的相关文章

websocket 群聊,单聊,加密,解密

群聊 from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServer from geventwebsocket.websocket import WebSocket app = Flask(__name__) # type:Flask user_socket_list = [] @app

websocket实现群聊和单聊(转)

昨日内容回顾 1.Flask路由 1.endpoint="user" # 反向url地址 2.url_address = url_for("user") 3.methods = ["GET","POST"] # 允许请求进入视图函数的方式 4.redirect_to # 在进入视图函数之前重定向 5./index/<nid> # 动态参数路由 <int:nid> def index(nid) 6.str

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而

使用Nio实现一个简易的群聊和单聊

服务端:接收客户端发送的消息,并进行转发. package socket.demo2; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.*; import java.nio.charset.StandardCharsets; import java.uti

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

上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户端推送消息.本篇就先不把业务搞复杂了,就默认现在两个用户都各自打开了对方的聊天窗口,那么聊天过程是这样的. 同理,B给A发消息也是这个流程,因为无论如何,A(ID)和B(ID)都会按照规则生成同一个组名.其中由于LayIM已经帮我们在客户端做好了发送消息并且将消息展示在面板上,所以我们要做的就是当接

基于flask 写的web_socket 单聊和群聊

群聊 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_socket_list = [] @app.route("/conn

环信即时通讯单聊集成,添加好友,实现单聊

前段时间由于项目需要,了解一下环信即时通讯,然后自己通过查资料写了一个基于环信的单聊demo,一下是源码,希望可以帮助到需要的小伙伴. 首先,我们要去环信官网注册账号,这个我就不多说了,注册完登录,创建应用,新建两个测试IM用户, 这里主要用到的是应用标示(Appkey) 好了,在环信官网下载对应的sdk,这个不多说了,最好下载一个文档,里面讲的很详细的. 好了,一下是源码 AppManager.java public class AppManager { private static Stac

【三分钟教程】轻松使用XMPP实现iOS单聊教程(附源码)

编号 需要修改的代码 1 ////  Prefix header////  The contents of this file are implicitly included at the beginning of every source file.//#import <Availability.h>//服务器IP#define kXMPPHost @"115.29.222.253"//服务器端口#define kHostPort 5222//服务器名称,也是用户名后缀#

Websocket 单聊功能

单聊代码 import json 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_socket_dict = {} @ap