
我在构思微服务下如何通过 websocket 作为交互。
client => http => server => ws/tcp => server2 到 => server2 通过 unixsocket 投递消息到 work 处理完成后 => 通过 ws 写消息回去 => server 的 ws 收到消息
这个时候 如果正常处理 加工收到的消息, 写入消息到 client 的 fd,close 掉 client 连接 应该是可行的。
client => server(伪代码)=> return
<?php func add(){ $get= $_REQUEST_PARAMS; return success("code=>200,data=$get,msg=''"); } 都不需要返回了, server 收到 server2 结果后 fwrite($client_fd,$data); close($client_fd);
<?php func add(){ $get= $_REQUEST_PARAMS; (new Ws)->send($get); } 上面写好奇怪的样子。。 我想实现下面的写法有办法吗(代码直观看着舒服),比如
<?php func add(){ $get= $_REQUEST_PARAMS; $res = (new Ws)->send($get); return success("code=>200,data=$res,msg=''"); } 如果想实现上面这样子,需要在加一个队列(起到 while true 阻塞效果?)。
开辟 1 片内存 $arr[$client_fd] => $data; 数据回来后写入。然后 pop 消息。
这样子就好像成 select 了。。 无时无刻在遍历,有数据在返回,性能问题很大。。
然后好像为了解决问题又引入新的问题。
大佬们给点思路呢
1 RedBeanIce 2024-05-13 10:49:26 +08:00 请直接说,你在做什么,想实现什么目标。 |
2 sentinelK 2024-05-13 10:55:02 +08:00 需要楼主提炼一下问题。 1 、问题只问核心就行了,不需要掺杂业务。 2 、目前你遇到的问题是什么? 3 、“写着舒服”是个什么概念? |
3 tool2dx 2024-05-13 11:04:48 +08:00 我猜测一下,OP server1 要返回客户端的 http 请求,但是内容是来自于 server2 。 而 server2 -> server1 是用 websocket 协议通讯。 所以 OP 说,server1 就需要傻等 server2 返回的结果,用 whire true 卡住 CPU ,死等?? |