我想请问一下这个方法如果用来接收二进制流数据的,每次接收多少字节,还有我如何才知道这个二进制流数据是否已经传输完毕呢?谢谢。
workerman支持自定义通讯协议,每次接收多少字节是自己根据协议来确定的。 一般协议头里包含了这个包的大小。
通讯协议参考手册 http://doc.workerman.net/315123
您是指使用frame协议吗?这个协议是如何使用的?有没例子说明使用方法呢
我现在是这样使用的。
$tcp_worker = new Worker("tcp://0.0.0.0:8333"); $tcp_worker->onMessage = function($connection, $data) { //但这个$data是每次都只获取一点数据,而不是所有的数据,那我如何知道它这次有没传输出完成? }
可以参考frame协议的方式,将包长放到包的头部,也就是前4个字节是网络字节序的整数。 frame协议实现参考手册。http://doc.workerman.net/315308 ,其中打包解包都有。
workerman里协议设定很简单,类似这样
// tcp改成frame $tcp_worker = new Worker("frame://0.0.0.0:8333"); $tcp_worker->onMessage = function($connection, $data) { ///这里$data会是完整的数据 }
客户端frame实现根据客户端语言而定。我这里没有其它语言的例子。
一般长连接通讯中不能使用裸tcp来做,裸tcp会发生数据被分段传输以及数据粘包的现象,这部分说明参考workerman手册 http://doc.workerman.net/315124
那我要在这个里面有时候需要传text,有时候需要传二进制流,这个链接里面我如何知道是哪种类型呢?谢谢。
可以在头部再加一个字节来区分
能否举个例子? 比如我和硬件协议的是 img:40142|二进制流内容+"\n" txt:12|文本内容+"\n"
我使用的也是php语言,那服务器端是如何接收数据呢?
class Frame { public static function input($buffer ,TcpConnection $connection) { if(strlen($buffer)<4) { return 0; } $unpack_data = unpack('Ntotal_length', $buffer); return $unpack_data; } public static function decode($buffer) { return substr($buffer, 4); } public static function encode($buffer) { $total_length = 4 + strlen($buffer); return pack('N',$total_length) . $buffer; } }
这个如何使用?
请把worekrman手册看完吧。 手册里都有。 上面讲的都是在手册里的。
http://doc.workerman.net/315125这个网址有说,
但说到关键的地方:
use Workerman\Worker; require_once '/your/path/Workerman/Autoloader.php' $json_worker = new Worker('JsonNL://0.0.0.0:1234'); $json_worker->onMessage = ... ... 这个后面的内容也是 $tcp_worker->onMessage = function($connection, $data) { //这里没说如何获取数据,难道就直接获取$data就可以取到二进制流的内容? }
老大人呢?
是啊,$data就是要接受的内容。 老哥,你有提问等待这么长的时间为何不去自己试下呢?几分钟的事儿...
workerman支持自定义通讯协议,每次接收多少字节是自己根据协议来确定的。
一般协议头里包含了这个包的大小。
通讯协议参考手册 http://doc.workerman.net/315123
您是指使用frame协议吗?这个协议是如何使用的?有没例子说明使用方法呢
我现在是这样使用的。
$tcp_worker = new Worker("tcp://0.0.0.0:8333");
$tcp_worker->onMessage = function($connection, $data)
{
//但这个$data是每次都只获取一点数据,而不是所有的数据,那我如何知道它这次有没传输出完成?
}
可以参考frame协议的方式,将包长放到包的头部,也就是前4个字节是网络字节序的整数。
frame协议实现参考手册。http://doc.workerman.net/315308 ,其中打包解包都有。
workerman里协议设定很简单,类似这样
客户端frame实现根据客户端语言而定。我这里没有其它语言的例子。
一般长连接通讯中不能使用裸tcp来做,裸tcp会发生数据被分段传输以及数据粘包的现象,这部分说明参考workerman手册 http://doc.workerman.net/315124
那我要在这个里面有时候需要传text,有时候需要传二进制流,这个链接里面我如何知道是哪种类型呢?谢谢。
可以在头部再加一个字节来区分
能否举个例子?
比如我和硬件协议的是
img:40142|二进制流内容+"\n"
txt:12|文本内容+"\n"
我使用的也是php语言,那服务器端是如何接收数据呢?
这个如何使用?
请把worekrman手册看完吧。
手册里都有。
上面讲的都是在手册里的。
http://doc.workerman.net/315125这个网址有说,
但说到关键的地方:
老大人呢?
是啊,$data就是要接受的内容。
老哥,你有提问等待这么长的时间为何不去自己试下呢?几分钟的事儿...