Your First PHP WebSocket Client
Tags: websocket, php, realtimemarketdata, tutorial
Published: 2022-10-28 14:47:42

This tutorial will guide you through setting up WebSocket in PHP and demonstrate how to acquire real-time market data. We will utilise a straightforward editor and the Composer package management to simplify the process of obtaining the necessary programmes.

Please [sign-up for free](https://tradermade.com/signup) to access real-time and historical Forex, CFD, and Crypto Data. TraderMade offers 1000 free requests every month. Also, you can self-start a 14-day WebSocket Trial once you log in.

**Environment setup.**
To determine whether PHP is already available, open a command window and type "php.exe -version"; if a version number returns, you can move on to the coding part; otherwise, you must install PHP. Additionally, you require an API key for the FX data service. Register for Free, obtain your streaming API key and start a 14-day WebSocket trial from your user dashboard. Otherwise, use a pre-populated code sample from our data docs page. 

**Setting up PHP**
Three simple steps are all that is required to set up PHP.
1. Download the php.exe build file from the PHP website and unpack it into a new directory.

2. Update your classpath or "Environment Variables" to reflect PHP.exe's location.

3. The output of the following command, which you may use to check your setup, will show the version number of your PHP installation.

```
//for windows
php.exe -version
// for linux
php -version
```
expected output.

```
PHP 7.2.24-0ubuntu0.18.04.13 (cli) (built: Jul  6 2022 12:23:22) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24-0ubuntu0.18.04.13, Copyright (c) 1999-2018, by Zend Technologies
```

**Make the project directory settings.**
Let's begin by making a directory for our source code and dependencies. Although I've given this directory the name WebScoketClientPHP, you can give it any name you choose.

Installing the Composer package manager is the next step. Once this is confirmed, we can download the package we will require. Run the following command in the directory you created in the previous step.

```
composer require textalk/websocket
```

**Write some code, shall we?**
Please make a new file called WebSocketClient.php in your source directory and then open it in your preferred text editor development environment.

We will first add our required statement and PHP tags before importing our packages from Composer.

```
<?php>
  require_once("vendor/autoload.php");
<?>
```

As seen below, we may build a new WebSocket by providing the URL for the WebSocket service. We can assign this fresh WebSocket to a client variable.

```
$client = new WebSocketClient("wss://marketdata.tradermade.com/feedadv");
```

We must wait for the WebSocket to provide a "connected" message to the server before sending our login response with the API Key.

```
$message =  $client->receive();
echo $message;
$client->text("{"userKey":"YOUR_API_KEY", "symbol":"GBPUSD,EURUSD"}");
```

Once we have established a connection and submitted our connection string, we will immediately enter into a loop to continuously check for updates on forex price data.

```
while(true){
   $message =  $client->receive();
   echo " Data ", $message, "
";
}
```

We may run our software and review the results.

```
php WebSocketClient.php
```

Voila! Right now, you can see live currency rates streaming.

```
Data {"symbol":"GBPUSD","ts":"1651244018768","bid":1.25486,"ask":1.25486,"mid":1.25486}
Data {"symbol":"GBPUSD","ts":"1651244018790","bid":1.25486,"ask":1.25488,"mid":1.2548699}
Data {"symbol":"GBPUSD","ts":"1651244018791","bid":1.25482,"ask":1.25488,"mid":1.2548499}
Data {"symbol":"GBPUSD","ts":"1651244018796","bid":1.25487,"ask":1.25488,"mid":1.254875}
Data {"symbol":"GBPUSD","ts":"1651244018815","bid":1.25485,"ask":1.25488,"mid":1.2548649}
Data {"symbol":"GBPUSD","ts":"1651244018816","bid":1.25485,"ask":1.25486,"mid":1.254855}
Data {"symbol":"GBPUSD","ts":"1651244018842","bid":1.25485,"ask":1.25487,"mid":1.25486}
Data {"symbol":"GBPUSD","ts":"1651244018866","bid":1.25485,"ask":1.25486,"mid":1.254855}
Data {"symbol":"GBPUSD","ts":"1651244018868","bid":1.25484,"ask":1.25486,"mid":1.25485}
```

Now that we have the data, we may consider processing it into a usable format. First, we must determine whether the data received is a data item or the "connected" message. We can then parse the elements from the data by parsing it.

```
if(strcmp($message,"connected") !== 0){
        $decoded_json = json_decode($message);
        echo $decoded_json->symbol, $decode-json->ts, $decode_jdon->bid, $decode__json->ask, "
";
}
```

You can view currency rates displayed in real time.

```
EURUSD 1651244529366 1.05515 1.05517
GBPUSD 1651244529371 1.2554 1.2554
GBPUSD 1651244529385 1.2554 1.25541
EURUSD 1651244529389 1.05515 1.05516
EURUSD 1651244529416 1.05518 1.05519
GBPUSD 1651244529455 1.25542 1.25543
GBPUSD 1651244529458 1.25542 1.25546
GBPUSD 1651244529492 1.2554 1.25546
GBPUSD 1651244529496 1.2554 1.25545
```

And that's it; your WebSocket should now be operational. If you have any issues, don't hesitate to reach us through our contact page or online chat.

TraderMade provides reliable and accurate Forex data via [Forex API](https://tradermade.com/forex). You can sign up for a free API key and start exploring real-time and historical data at your fingertips.

Also, please go through the originally published tutorial on the TraderMade website for [PHP WebSocket Client](https://tradermade.com/tutorials/your-first-php-websocket).

> Along with that, refer to other tutorials based on PHP to enhance your coding and data retrieval skills:
> 1. [Forex REST JSON API](https://tradermade.com/tutorials/forex-rest-json-api-with-php)
> 2. [Real-Time Forex Data to OHLC Charts with PHP](https://tradermade.com/tutorials/transforming-real-time-forex-data-into-ohlc-bars-with-php)

> Here are technical tutorials in other popular programming languages to fetch real-time forex and CFD data:
> 1. [C++ WebSocket Client](https://tradermade.com/tutorials/how-to-build-your-first-cpp-websocket-client)
> 2. [Real-Time Market Data via WebSockets with R](https://tradermade.com/tutorials/real-time-forex-cfd-and-crypto-websocket-with-r)
> 3. [Real-Time Market Data via WebSockets with Java](https://tradermade.com/tutorials/real-time-forex-cfd-and-crypto-websocket-with-java)
> 4. [Python WebSocket Client](https://tradermade.com/tutorials/python-websocket-client)