1. Go to this page and download the library: Download linksoft/socket-client library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
linksoft / socket-client example snippets
declare(strict_types=1);
use LinkSoft\SocketClient\Event\LinkSocketInitSuccessEvent;
use LinkSoft\SocketClient\Client;
class LinkSocketClientConnectListener implements ListenerInterface
{
/**
* @return string[] returns the events that you want to listen
*/
public function listen(): array
{
return [LinkSocketInitSuccessEvent::class];
}
/**
* Handle the Event when the event is triggered, all listeners will
* complete before the event is returned to the EventDispatcher.
*/
public function process(object $event)
{
$client = Client::getInstance();
// TODO: some thing...
}
}
use LinkSoft\SocketClient\Client;
use LinkSoft\SocketClient\Message\RequestMessage;
$requestId = snowflake_id();
$message = "your message";
// 请求内容必须是一个 RequestMessage 对象
$requestMessage = new RequestMessage($requestId, $message);
// 返回内容是一个 ResponseMessage 对象
$res = Client::getInstance()->send($requestMessage);
var_dump($res);
declare(strict_types=1);
namespace App\Utils;
use App\Component\Parser;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Utils\Codec\Json;
use LinkSoft\SocketClient\Message\RequestMessage;
use LinkSoft\SocketClient\Message\ResponseMessage;
use LinkSoft\SocketClient\Packer\PackerInterface;
use LinkSoft\SocketClient\Util\ResponseMessageManager;use phpseclib3\Crypt\Blowfish;
class Packer implements PackerInterface
{
public function __construct() {
// TODO: init packer
}
public function pack(RequestMessage $data): string
{
$content = $data->getContent();
// TODO: 定义你自己的打包器,返回内容为 socket 实际传输内容
}
public function unpack(string $data): ResponseMessage
{
// $data 为服务端推送过来的内容,你需要将这一部分内容转换成一个 ResponseMessage 对象,
// 并保证这个对象一定可以有一个与你之前发送的 RequestMessage->requestId 一样的 requestId.
return ResponseMessageManager::newSuccessResponse($requestId, $message);
}
}
// 在你项目配置目录 config->autoload->dependencies.php 下,替换掉项目提供的 packer
// dependencies.php
use LinkSoft\SocketClient\Packer\PackerInterface;
use YourPackerNamespace\Packer;
return [
// other code...
PackerInterface::class => Packer::class,
];
// 定义一个 callback,代码类似如下:
use LinkSoft\SocketClient\Callback\CallbackInterface;
use LinkSoft\SocketClient\Message\ResponseMessage;
class Callback implements CallbackInterface
{
/**
* 回调事件处理器
* @param ResponseMessage $message
* @return mixed
*/
public function handle(ResponseMessage $message)
{
var_dump('im callback.');
var_dump($message->getContent());
return 11;
}
}
// 在你项目配置目录 config->autoload->dependencies.php 下,替换掉项目提供的 callback
// dependencies.php
use LinkSoft\SocketClient\Callback\CallbackInterface;
use YourCallbackNamespace\Callback;
return [
// other code...
CallbackInterface::class => Callback::class,
];
declare(strict_types=1);
namespace LinkSoft\SocketClient\Processor;
use LinkSoft\SocketClient\Message\ResponseMessage;
class ResponseProcessor implements ResponseProcessorInterface
{
/**
* 处理可能存在的多包接收的情况
* @param ResponseMessage $stockResponse
* @param ResponseMessage $newResponse
* @return ResponseMessage
*/
public function handle(ResponseMessage $stockResponse, ResponseMessage $newResponse): ResponseMessage
{
$stockResponse->setContent($newResponse->getContent());
$stockResponse->setErrCode($newResponse->getErrCode());
$stockResponse->setErrMsg($newResponse->getErrMsg());
if ($newResponse->getIsEnd()) {
$stockResponse->setIsEnd();
}
return $stockResponse;
}
}