Veri göndermek ve almak için PHP içinde socket_select kullanmak için doğru yolu nedir?
Ben server TCP ve hem sağlayan bir bağlantı var UDP paket bağlantıları, ben de kullanan duyuyorum. Bu bağlantılar içinde ben yolluyorum hem aynı port üzerinde paketlerinin alınması, ancak TCP paket (29999
) ve UDP başka portu gönderilir ({[(2)], bir bağlantı noktasına gönderilir }). İletim tipi AF_INET
bu olacaktır. IP adresi döngü olacak 127.0.0.1
.
Ben bu senaryo içinde bir soket bağlantısı oluşturmak için nasıl birçok soru var. Örneğin, socket_create_pair bağlantısı yapmak için kullandığınız, ya da sadece socket_create socket_connect ardından kullanın ve ardından uygulamak socket_select daha iyidir ?
Hiçbir veri istemciye sunucudan gönderilir ve bağlantıyı sürdürmek için müşteriye kadar olduğunu bir şans var. Bu socket_select çağrı içindeki fonksiyonunu zaman aşımı kullanılarak yapılacaktır. Hiçbir veri süre içinde gönderilmesi gerekmektedir, socket_select işlevi kırmak ve daha sonra gönderilebilir canlı paket tutacak. Aşağıdaki komut istemcisi olduğunu.
// Create
$TCP = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$UDP = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
// Misc
$isAlive = TRUE;
$UDPPort = 30000;
define('ISP_ISI', 1);
// Connect
socket_connect($TCP, '127.0.0.1', 29999);
socket_connect($UDP, '127.0.0.1', $UDPPort);
// Construct Parameters
$recv = array($TCP, $UDP);
$null = NULL;
// Make The Packet to Send.
$packet = pack('CCCxSSxCSa16a16', 44, ISP_ISI, 1, $UDPPort, 0, '!', 0, 'AdminPass', 'SocketSelect');
// Send ISI (InSim Init) Packet
socket_write($TCP, $packet);
/* Main Program Loop */
while ($isAlive == TRUE)
{
// Socket Select
$sock = socket_select($recv, $null, $null, 5);
// Check Status
if ($sock === FALSE)
$isAlive = FALSE; # Error
else if ($sock > 0)
# How does one check to find what socket changed?
else
# Something else happed, don't know what as it's not in the documentation, Could this be our timeout getting tripped?
}