我正在尝试使用websockets将一些数据从php应用程序发送到用户的浏览器.因此我决定将Swoole与RabbitMQ结合使用.
这是我第一次使用websockets并在阅读了一些关于Socket.IO,Ratchet等的帖子后,我决定停止使用Swoole,因为它是用C编写的,并且可以方便地与php一起使用.
这就是我理解使用websockets启用数据传输的想法:1)在CLI中启动RabbitMQ worker和Swoole服务器2)php应用程序向RabbitMQ发送数据3)RabbitMQ向worker发送带有数据的消息4)Worker接收带有数据的消息+建立与Swoole套接字服务器的套接字连接.5)Swoole服务器向所有连接广播数据
问题是如何将Swoole套接字服务器与RabbitMQ绑定?或者如何让RabbitMQ与Swoole建立连接并向其发送数据?
这是代码:
Swoole服务器(swoole_sever.php)
$server = new \swoole_websocket_server("0.0.0.0", 2345, SWOOLE_BASE);
$server->on('open', function(\Swoole\Websocket\Server $server, $req)
{
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, \Swoole\Websocket\Frame $frame)
{
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd)
{
echo "connection close: {$fd}\n";
});
$server->start();
Run Code Online (Sandbox Code Playgroud)
工作者从RabbitMQ接收消息,然后连接到Swoole并通过套接字连接(worker.php)广播消息
$connection = new AMQPStreamConnection('0.0.0.0', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('task_queue', false, true, false, false);
echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
$callback = function($msg){
echo " …
Run Code Online (Sandbox Code Playgroud) 我收到PowerMock错误,但我没有使用PowerMocking.我正在使用正常的嘲弄.这是我要测试的课程:
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class IlinqBeanDataBuilder {
@Autowired
private Settings settings;
private static final String SERVICE_CODE_FOR_FACILITY_COUNTRY = "SERVICE_CODE_FOR_FACILITY_COUNTRY";
private static final String SERVICE_CODE_A_CONSTANT = "A";
private static final String HARD_DOWN = "HARD DOWN";
private static final String QUICK_QUESTION = "QUICK QUESTION";
private static final String PARTIAL_DOWN = "PARTIAL DOWN";
private static final String COMPLETELY_DOWN = "Completely Down";
private static final String UP = "Up";
private static final String PARTIALLY_DOWN = "Partially Down";
public …
Run Code Online (Sandbox Code Playgroud) 我有一个文本文件如下:
#1xx Informational responses
100=Continue
101=Switching Protocols
102=Processing
#2xx Success
200=OK
201=Created
202=Accepted
203=Non-Authoritative Information
204=No Content
205=Reset Content
206=Partial Content
207=Multi-Status
208=Already Reported
226=IM Used
Run Code Online (Sandbox Code Playgroud)
我想要做的是将其转换为下面的一个:
#1xx_Informational responses
100=Continue
101=Switching_Protocols
102=Processing
#2xx_Success
200=OK
201=Created
202=Accepted
203=Non_Authoritative_Information
204=No_Content
205=Reset_Content
206=Partial_Content
207=Multi_Status
208=Already_Reported
226=IM_Used
Run Code Online (Sandbox Code Playgroud)
我可以用:
:%s/[ \|-]/_/g
Run Code Online (Sandbox Code Playgroud)
但它无条件地在所有行中改变空格或_和_,包括第一行:
#1xx_Informational_responses
Run Code Online (Sandbox Code Playgroud)
我不要那个.相反,我想要实现的是只有当一行以数字开头时才用_替换空格和-s.对于所有其他线路,我不想执行替换操作.
有没有办法"有条件地"执行更换操作?我不想处理行号,行号可能会改变.我想要关于线的内容的答案(从这种情况的数字开始),而不是行号.
提前致谢.
我遇到过一种情况,我需要使用一种方法来检查10到50之间的数字的两位数之和是否大于10,然后显示该数字.我必须使用for循环.
这是我的主要内容:
public class nested_loop2
{
public static void main(String args[])
{
for (int i=10;i<=50;i++){
System.out.println(ax(i));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的方法:
public static int ax(int i){
int a=i/10;
int b=i%10;
if((a+b)>10){
return i;
}
else {
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我希望它只显示那些通过验证的特定数字.在当前状态下,它还会为所有不适合的打印出0.我不希望它返回0,我只是希望它不返回else {}语句的任何内容.