websocket 消息发送后回调

问题描述

例:发送登录请求后及时获取返回值,然后根据返回值处理接下来的事件,类似http请求,不过需求是要用websocket做到这一点。

我们在websocket 介绍上能够充分认知到websocket的所有回调函数都是异步执行的,也就是说我发送send(msg)之后我要读取信息是在onmessage()里面读取,这显然不符合我们的要求。

我想要这样的效果

ws.send('',(res)=>{
    //res为send的返回值(类似于response)
})


阅读 7.1k
评论
    4 个回答

    这个问题的问题在于

    1. 如果你希望client发送请求,server必须有个响应与之对应,则你根本不需要websocket,或者这部分用http,其他部分用websocket
    2. 如果你希望clientserver双向发送数据,则根本不能保证send后面接的就一定是你希望服务端返回的结果,你是sendserver可能压根就还没收到。

    这不是一个实现的问题,这是一个设计的问题。

             // 创建websocket
             ws = new WebSocket("ws://xxx:xxx");
             // 当socket连接打开时,输入用户名
             ws.onopen = onopen;
             // 当有消息时根据消息类型显示不同信息
             ws.onmessage = onmessage; 
             ws.onclose = function() {
                console.log("连接关闭,定时重连");
                connect();
             };
             ws.onerror = function() {
                 console.log("出现错误");
             };

      有一个一开始发送一条消息的方法。

      ws.onopen

      当然这个可能还是不能解决你的问题。不过 下面是一个 PHP聊天室框架 的例子。js 部分还是可以参考的。

      https://github.com/walkor/wor...

        http单向协议,ws是双向的,这两个请求要想得到服务器的返回信息,难道不都是要等对方相应之后才能触发回调?
        只不过ws是把回调绑在ws实例的onmessage上。

          只能简单的给你看一下,因为公司防护系统原因不能复制代码,只能截图给你看看,我是封装了一套自己业务系统的websocket服务

          clipboard.png

          clipboard.png

          clipboard.png

          clipboard.png

          clipboard.png

            撰写回答

            登录后参与交流、获取后续更新提醒

            相似问题
            推荐文章