目前在做一個物聯(lián)網(wǎng)系統(tǒng),demo的Gateway用來做設(shè)備的tcp連接,
$gateway = new Gateway("tcp://0.0.0.0:8282");
$gateway->startPort = 2900;
又新建了一個websocket的Gateway用來做網(wǎng)頁的連接
$gateway = new Gateway("websocket://0.0.0.0:1234");
$gateway->startPort = 3000;
然后用網(wǎng)頁連接了websocket端口,用tcp測試工具連接了tcp端口,當(dāng)其中一個終端發(fā)消息時其他終端都可以收到消息,這是沒問題的,但是tcp端發(fā)送消息后會把websocket端口所有用戶踢掉線,試了幾次都是如此。
目前是測試domo,基本上沒有太多的改動,所以不是代碼的問題,這究竟是為什么?
測試環(huán)境windows10 64位
暫時沒找到同樣的問題。
懷疑是 websocket 接收到消息了, 處理過程報錯, 導(dǎo)致掉線了
網(wǎng)頁端沒有收到消息,直接掉線,代碼還是下載的demo,啥也沒改
/**
* 當(dāng)客戶端連接時觸發(fā)
* 如果業(yè)務(wù)不需此回調(diào)可以刪除onConnect
*
* @param int $client_id 連接id
*/
public static function onConnect($client_id)
{
// 向當(dāng)前client_id發(fā)送數(shù)據(jù)
Gateway::sendToClient($client_id, "Hello $client_id\r\n");
// 向所有人發(fā)送
Gateway::sendToAll("$client_id login\r\n");
}
/**
* 當(dāng)客戶端發(fā)來消息時觸發(fā)
* @param int $client_id 連接id
* @param mixed $message 具體消息
*/
public static function onMessage($client_id, $message)
{
// 向所有人發(fā)送
Gateway::sendToAll("$client_id said $message\r\n");
}
/**
* 當(dāng)用戶斷開連接時觸發(fā)
* @param int $client_id 連接id
*/
public static function onClose($client_id)
{
// 向所有人發(fā)送
GateWay::sendToAll("$client_id logout\r\n");
}
<?php
/**
* websocket 請求網(wǎng)關(guān)
*/
use \Workerman\Worker;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Autoloader;
// 自動加載類
require_once __DIR__ . '/../../vendor/autoload.php';
// gateway 進程,這里使用Text協(xié)議,可以用telnet測試
$gateway = new Gateway("websocket://0.0.0.0:1234");
// gateway名稱,status方便查看
$gateway->name = 'websocketGateway';
// gateway進程數(shù)
$gateway->count = 4;
// 本機ip,分布式部署時使用內(nèi)網(wǎng)ip
$gateway->lanIp = '127.0.0.1';
// 內(nèi)部通訊起始端口,假如$gateway->count=4,起始端口為4000
// 則一般會使用4000 4001 4002 4003 4個端口作為內(nèi)部通訊端口
$gateway->startPort = 3000;
// 服務(wù)注冊地址
$gateway->registerAddress = '127.0.0.1:1238';
// 心跳間隔
// $gateway->pingInterval = 40;
// 連續(xù)幾次沒有心跳則斷開連接
// $gateway->pingNotResponseLimit = 1;
// 如果不是在根目錄啟動,則運行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}