$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
// socket_bind($socket,"120.76.169.136",10001);
$connection_to_baidu = new UdpConnection($socket,'120.76.169.136:10001');
$connection_to_baidu->send($bin_data);
我想把workerman当成一个客户端给别的服务器发UDP消息来通信,在start.php中onWorkerStart的事件处理写了上面这段代码,为什么数据发送不出去?new UdpConnection($socket,'120.76.169.136:10001');这个类的构造函数里面的两个参数分别填写什么?
那个udp类不是用作udp客户端的。
发udp数据直接用php的接口就好了
$client = stream_socket_client('udp://120.76.169.136:10001');
stream_socket_sendto($client, $data);
多谢,按照你的方法,UDP消息可以发送和接受了。想请教一下UdpConnection这个类是在什么场景下用的?
多谢。再请教一个问题,我想在wolkerman的start.php里面建立一个单例的socket(或者全局的socket也行),然后给其他PHP 文件都使用这个socket来通信,这个要怎么操作?我尝试在其他PHP里面包含start.php这个文件,提示有错误。
我这边的一个业务场景是:用web来和智能硬件通讯,web服务器侧目前用的是apache mysql php的方案,由于apache每次会将上次建立的socket自动回收,导致每次服务器与硬件通信时,使用的端口号都不一样。因此想用wolkerman的不释放socket的特性来保证服务器侧的端口号固定。
http://doc.workerman.net/315240
参见手册
多谢,用链接里面的方法可以了。只是这些UDP通讯好像都是同步串行通讯的,workerman能做到UDP的异步通讯吗?
workerman自身的通讯都是异步的
为什么我用wiresh抓包,看到的workerman发出来的UDP都是串行的,前面的包没有收到应答或者超时,后面的包就不发送。我把代码和wireshark抓包截图发一下,有时间帮忙看一下,多谢。
通讯是异步的,但是你的业务逻辑是串行的。
类似你做事情(业务)是串行的,但是如果你做事情的同时给其他人发快递(发送消息),那么这个快递传输过程中不用你参与,有公司快递人员(操作系统)自动给你发送到。
我们的业务逻辑是要求并行的,这里可能是我们设计或者编码上有些问题。能否指点一下我们需要怎么改,我们的目前业务流程是在批量控制智能硬件时,先从web前端发起HTTP请求(同时有多个HTTP请求访问同一个PHP文件多次,每个HTTP请求最终要发送数据的硬件不是同一个),由apache处理这些HTTP请求,在上述PHP文件里面给workerman监听的UDP端口发送消息,然后workerman发送UDP到部署在云上面的代理服务器,最后由代理服务器分开发送到每个智能硬件。
上面这个方案导致的问题是如果某个智能硬件出了问题,没有及时应答UDP消息,会导致整个批量控制硬件过程非常耗时。
workerman没有udp客户端,所以你这个要异步做业务逻辑比较难。
那是否如果硬件和中间的代理都改成TCP通讯,可以在这种业务逻辑下实现异步通讯?是必须用TCP长链接,还是长连接和短连接都可以?
另外问一下,如果我不用apache,直接用workerman来监听HTTP请求,能做到UDP的异步吗。
我不是很清楚你们的业务,理论上是可以的
多谢。我后面写个demo测试一下