我使用了 workman 来监听 http 协议,但是在我通过页面发起请求后,并没有在 terminal 看到有对 $worker->onmenssaee = function ($connection, $data) { var_dump($data);}; 回调输出。请问这是怎么回事呢?
Worker 代码:
$worker = new Worker('http://192.168.50.168:8800');
// 这里进程数必须设置为1
$worker->count = 1;
// worker进程启动后建立一个内部通讯端口
$worker->onWorkerStart = function($worker)
{
// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
$inner_text_worker = new Worker('Text://192.168.50.168:5678');
$inner_text_worker->onMessage = function($connection, $buffer)
{
global $worker;
// $data数组格式,里面有uid,表示向那个uid的页面推送数据
$data = json_decode($buffer, true);
$uid = $data;
print_r($data);
// 通过workerman,向uid的页面推送数据
$ret = sendMessageByUid($uid, $buffer);
// 返回推送结果
$connection->send($ret ? 'ok' : 'fail');
};
$inner_text_worker->listen();
};
// 新增加一个属性,用来保存uid到connection的映射
$worker->uidConnections = array();
// 当有客户端发来消息时执行的回调函数
$worker->onMessage = function($connection, $data)use($worker)
{
var_dump($data); // 这里使用输出来调试,但是没有发现有输出
// 判断当前客户端是否已经验证,既是否设置了uid
if(!isset($connection->uid))
{
// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid = $data;
/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
* 实现针对特定uid推送数据
*/
$worker->uidConnections = $connection;
return;
}
};
HTML页面代码:
<!DOCTYPE html5>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试页面</title>
</head>
<body>
<form action="http://blog.dev/work" method="get">
<p>
<label>Name:</label>
<input type="text" name="msg" />
<input type="hidden" name="uid" value="uid_2016_06_01" />
</p>
<p><input type="submit" value="发送" /></p>
</form>
</body>
</html>
确认http://blog.dev/work是workerman的地址?
看到你的workerman监听的是8800端口,并不是80端口。
不好意思,我搞错了。
http协议只支持80和8080端口吗 用其他的端口可以吗
任何端口都可以,http://example.com:89
那前端怎么调起呀var ws = new WebSocket("ws://localhost:9998/echo"); 或者是var ws = new WebSocket("http://localhost:9998/echo");这样调起吗
js new Websocket("ws(s)://") ,你问的很基础,http也许你应该用Ajax
https://www.workerman.net/doc/workerman/http/request.html
文档刚看到这个位置 因为看到有个http请求 能获取cookie 所以测一下这个 结果用var ws = new WebSocket("http://localhost:9998/echo");这种格式调起不起来 尴尬了
这种几年前的问题而且已经解决的就不要挖起来了吧,而且你这个是websocket协议
嗯嗯 懂了 谢谢