This is an automated email from the ASF dual-hosted git repository.
ianmcook pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-experiments.git
The following commit(s) were added to refs/heads/main by this push:
new 7c03915 [MATLAB] Add simple HTTP `GET` MATLAB Client example (#45)
7c03915 is described below
commit 7c0391533788d971cce92275e6f99c221c955dcb
Author: Kevin Gurney <[email protected]>
AuthorDate: Wed Jan 22 16:44:05 2025 -0500
[MATLAB] Add simple HTTP `GET` MATLAB Client example (#45)
Adds a simple MATLAB HTTP GET client example
---------
Lead-authored-by: Kevin Gurney <[email protected]>
Co-authored-by: Sarah Gilmore <[email protected]>
Signed-off-by: Ian Cook <[email protected]>
---
http/get_simple/matlab/README.md | 34 ++++++++++++++++++++++++
http/get_simple/matlab/client.m | 56 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+)
diff --git a/http/get_simple/matlab/README.md b/http/get_simple/matlab/README.md
new file mode 100644
index 0000000..d6f575a
--- /dev/null
+++ b/http/get_simple/matlab/README.md
@@ -0,0 +1,34 @@
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+# HTTP GET Arrow Data: Simple MATLAB Client Example
+
+This directory contains a minimal example of an HTTP client implemented in
MATLAB. The client:
+
+1. Sends an HTTP GET request to a server.
+2. Receives an HTTP 200 response from the server, with the response body
containing an Arrow IPC stream of record batches.
+3. Creates an Arrow table from the record batches
+
+To run this example, first start one of the server examples in the parent
directory, then:
+
+Run the MATLAB `client` script in "batch mode":
+
+```sh
+matlab -batch client
+```
diff --git a/http/get_simple/matlab/client.m b/http/get_simple/matlab/client.m
new file mode 100644
index 0000000..995413b
--- /dev/null
+++ b/http/get_simple/matlab/client.m
@@ -0,0 +1,56 @@
+% Licensed to the Apache Software Foundation (ASF) under one
+% or more contributor license agreements. See the NOTICE file
+% distributed with this work for additional information
+% regarding copyright ownership. The ASF licenses this file
+% to you under the Apache License, Version 2.0 (the
+% "License"); you may not use this file except in compliance
+% with the License. You may obtain a copy of the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing,
+% software distributed under the License is distributed on an
+% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+% KIND, either express or implied. See the License for the
+% specific language governing permissions and limitations
+% under the License.
+
+% The address of the HTTP server that
+% returns Arrow IPC Stream responses.
+server = "http://localhost:8008";
+
+% Diagnostic output.
+disp("Reading Arrow IPC Stream from " + server + "...");
+
+% Start timing.
+tic;
+
+% Make an HTTP GET request to the local server
+% to fetch an Arrow IPC Stream and read all the
+% data into memory as a byte (uint8) array.
+options = weboptions(ContentType="binary");
+bytes = webread(server, options);
+
+% Construct an Arrow RecordBatchStreamReader from the in-memory bytes.
+reader = arrow.io.ipc.RecordBatchStreamReader.fromBytes(bytes);
+
+% Read an Arrow table from the in-memory bytes.
+arrowTable = reader.readTable();
+
+% Stop timing.
+time = toc;
+% Round elapsed time to two decimal places.
+time = round(time, 2);
+
+% Number of bytes received.
+nbytes = length(bytes);
+
+% Diagnostic output.
+disp("DONE ✔");
+disp("---------------");
+disp("Results")
+disp("---------------");
+disp("Time (s): " + sprintf("%.2f", time));
+disp("Num Bytes: " + string(nbytes));
+disp("Num Rows:" + string(arrowTable.NumRows));
+disp("Num Columns:" + string(arrowTable.NumColumns));