设为首页 收藏本站
查看: 536|回复: 1

随笔四 : 浅谈Websocket即时通讯的搭建思路及源码

[复制链接]
累计签到:500 天
连续签到:2 天
发表于 2023-5-26 00:38:45 | 显示全部楼层 |阅读模式
本帖最后由 郑统京 于 2023-5-26 00:54 编辑

--1、后端通过使用GeventWebsocket模块 + Flask 创建websocket服务
--2、接收"连接" websocket socket_dict[username] = socket保持连接
--3、转发消息 msg = sock.receive() rece_sock=socket_dict[rece]  rece_sock.send(msg)

# 导入Gevent  Websocket
from geventwebsocket.websocket import WebSocket  # 语法提示
from geventwebsocket.handler import WebSocketHandler  # 增加 handler_class websock处理方式
from geventwebsocket.server import WSGIServer  # 替换原始的WSGI
# FlaskWeb框架
from flask import Flask, request

app=Flask(__name__)

socket_dict ={}

@app.route("/ws/<username>")
def ws(username):
    sock=request.environ.get("wsgi.websocket") # type:WebSocket
    if sock:
        socket_dict[username]=sock
    else:
        return "请使用ws"
    print(len(socket_dict),socket_dict)
    while True:
        msg = sock.receive()
        print(msg)
        msg_dict = json.loads(msg)
        receiver = msg_dict.get("receiver")
        rece_sock = socket_dict.get(receiver)
        rece_sock.send(msg)
if __name__ == '__main__':
    # 已经跑了一个正常的服务是9527,这个专门跑ws服务9528
    http_serv=WSGIServer(("0.0.0.0",9528),app,handler_class=WebSocketHandler)
    http_serv.serve_forever()
--4App Websocket 客户端创建
    1、登陆时创建Websocket客户端 公共的
         # login.html页面 给index传入事件创建websocket,因为index页面底部一致都在用,并且频率最高
              var index_wv=plus.webview.getWebviewById("HBuilder")
                mui.fire(index_wv,'create_ws',{"user_id":data.data._id)
          # index.html 接收login传递的create_ws事件 创建websocket,需要在index页面创建websocket,因为所有的页面都在加载index整个底部
              var ws =null;
               function create_ws(user_id){
                var ws_url= "ws://192.168.2.149:9528/ws/"+user_id;
                ws = new WebSocket(ws_url);}
    2send_music 事件监听并发送消息 -ws.send()
          # player.html播放也页面通过点击websocket给玩具发送音乐
                document.getElementById('send_music').addEventListener('tap',function () {
                        var index = plus.webview.getWebviewById("HBuilder");
                                mui.fire(index,'send_music',{
                                        // 通过 player_wv 获取到歌曲名
                                        filename : player_wv.music,
                                        receiver : "toy",
                                 })
                })
                        # 接收到来自player页面通过websocket发送音乐事件给websocket服务端转发到玩具
               document.addEventListener('send_music',function (eventMessage) {
                      var send_str = JSON.stringify(eventMessage.detail); // 传递来数据是对象,需要转换成json字符串来发送给websocket通讯
                       ws.send(send_str)
                     })
--5Web Websocket 客户端
    1render页面发送ws协议创建客户端
        接收到监听的消息之后
    2、转换成object
          3
、播放内容
var serv = "http:127.0.0.1:9527/get_music/"function create_ws(toy_id){
   ws=new WebSocket(ws_serv+toy_id)
   // 监听消息,send发来数据后做处理
   ws.onmessage = function(eventMessage){
   // websocket后端传过来的参数是json字符传需要转换成对象操作
   var data = JSON.parse(eventMessage.data);
   document.getElementById("player").src=serv  + data.filename

WebSocket服务端.png
内容1.png
内容2.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1003800-1-1.html 上篇帖子: 随笔三 : 爬取喜马拉雅音频 下篇帖子: 随笔五 :python内存、内存地址、变量、深浅拷贝关系
累计签到:500 天
连续签到:2 天
 楼主| 发表于 2023-5-26 00:55:06 | 显示全部楼层
上传格式紊乱,重新以图片发出

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表