我在构思微服务下如何通过 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 223 天前
请直接说,你在做什么,想实现什么目标。
|
2
sentinelK 223 天前
需要楼主提炼一下问题。
1 、问题只问核心就行了,不需要掺杂业务。 2 、目前你遇到的问题是什么? 3 、“写着舒服”是个什么概念? |
3
tool2dx 223 天前
我猜测一下,OP server1 要返回客户端的 http 请求,但是内容是来自于 server2 。
而 server2 -> server1 是用 websocket 协议通讯。 所以 OP 说,server1 就需要傻等 server2 返回的结果,用 whire true 卡住 CPU ,死等?? |
6
v2li32 OP @tool2dx js 的怎么个异步法呢,比如 node, server 回来的 ws 数据跟 客户的 client 他们没有桥梁。 所以才想到搞一个队列阻塞 被动查询是否有数据。
|
7
julyclyde 223 天前
按说 HTTP upgrade 之后就不能再 downgrade 了吧?
|