websocket 消息发送后回调

问题描述

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

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

我想要这样的效果

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


阅读 19.5k
4 个回答

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

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

这个问题的问题在于

  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上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题