-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcall-remote.html
executable file
·325 lines (295 loc) · 14 KB
/
call-remote.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
<!DOCTYPE html>
<html lang="en">
<head>
<!--__GOLF_REDIRECT__-->
<title>Call remote</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="HandheldFriendly" content="True"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="canonical" href="https://golf-lang.com/call-remote.html" />
<style>
body, html {
color:black;
text-rendering: optimizelegibility;
background-color: white;
min-height: 150%;
font-family: "Times New Roman";
font-weight:400;
font-size:18px;
line-height:27px;
letter-spacing: 2px;
z-index: 1;
height: 100%;
text-align:left;
width:80%;
margin-left:auto;
margin-right:auto;
padding:0;
/*font-family: Helvetica, Arial, sans-serif;*/
}
body {
padding-left:1vw;
padding-right:1vw;
}
.ncode {
line-height:20px;
letter-spacing: 0px;
font-size:14px;
font-family: monospace;
display:inline-block;
max-width:100%;
min-width:90%;
margin:0;
padding:0;
padding-left:5px;
padding-top:3px;
padding-bottom:3px;
margin-bottom:15px;
border: 2px solid #d6d6d6;
background-color:#f5f7f4;
white-space:nowrap;
}
.shcode {
line-height:23px;
letter-spacing: 0px;
font-size:14px;
font-family: monospace;
display:inline-block;
max-width:100%;
min-width:90%;
margin:0;
padding:0;
padding-left:5px;
padding-top:3px;
padding-bottom:3px;
margin-bottom:15px;
border: 2px solid #d6d6d6;
background-color:#f5f7f4;
white-space:nowrap;
}
.sqlcode {
line-height:23px;
letter-spacing: 0px;
font-size:14px;
font-family: monospace;
display:inline-block;
max-width:100%;
min-width:90%;
margin:0;
padding:0;
padding-left:5px;
padding-top:3px;
padding-bottom:3px;
margin-bottom:15px;
border: 2px solid #d6d6d6;
background-color:#f5f7f4;
white-space:nowrap;
}
.htmlcode {
line-height:23px;
letter-spacing: 0px;
font-size:14px;
font-family: monospace;
display:inline-block;
max-width:100%;
min-width:90%;
margin:0;
padding:0;
padding-left:5px;
padding-top:3px;
padding-bottom:3px;
margin-bottom:15px;
border: 2px solid #d6d6d6;
background-color:#f5f7f4;
white-space:nowrap;
}
.code {
line-height:23px;
letter-spacing: 0px;
font-size:14px;
font-family: monospace;
display:inline-block;
max-width:100%;
min-width:90%;
margin:0;
padding:0;
padding-left:5px;
padding-top:3px;
padding-bottom:3px;
margin-bottom:15px;
border: 2px solid #d6d6d6;
background-color:#f5f7f4;
white-space:nowrap;
}
/*Just like h1 but for pdf conversion it would be indented this way it's not*/
.vhub {
display: block;
font-size: 1.6em;
margin-top: 0.63em;
margin-bottom: 0.63em;
margin-left: 0;
margin-right: 0;
font-weight: bold;
}
/*Just like h2 but for pdf conversion it would be indented this way it's not*/
.vsub {
display: block;
font-size: 1.25em;
margin-top: 0.53em;
margin-bottom: 0.53em;
margin-left: 0;
margin-right: 0;
font-weight: bold;
}
ul {
margin-left: 0.75vw;
padding-left: 0;
}
li {
margin-left: 0.75vw;
padding-left: 0;
}
/* this must be last, as it overrides previous settings, for mobile */
@media (hover: none) {
a {
display: inline-block;
padding-top: 3px;
padding-bottom: 2px;
}
body {
padding-left:2vw;
padding-right:2vw;
font-size:14px;
line-height:22px;
letter-spacing: 1px;
}
}
/*The following is for code snippets that are highlighted by 2html vim*/
pre { overflow-x: scroll; margin:0; padding:0; font-family:monospace; }
.Identifier { color: #008b8b; }
.Statement { color: #af5f00; }
.PreProc { color: #5fd7ff; }
.Type { color: #005f00; }
.Comment { color: blue ; }
.Constant { color: #ff00ff; }
/*end of highlighted snippets*/
a {
text-decoration:none;
padding-bottom: 0px;
color:inherit;
border-bottom: 2px solid #6cb8f0;
}
a:hover {
text-decoration: none;
color:black;
border-bottom: 1px solid red;
}
/*do not underline links nor should they be active*/
pre a {
text-decoration:none;
color:black;
border-bottom: none;
pointer-events: none;
cursor: default;
}
.golfSnippet {display:none;}
ul {
list-style-type:square;
list-style-position: outside;
}
</style>
</head>
<body>
<script>
function gg_copy(gt, eid, gc) {
gt.textContent = eid.textContent;
gt.select();
document.execCommand("copy");
gc.style.visibility="visible"
setTimeout(()=>{ gc.style.visibility="hidden"; }, 1000);
}
</script>
<!--GOLFMENU13-->
<!--GOLFENDMENU13-->
<!--BEGVDOC90-->
<div class='vhub' style='margin-top:10px;margin-right:20px;text-align:right;background-color:white;'><a href='https://golf-lang.com' style='border-bottom:0px'><img src='https://golf-lang.com/golf.png'/></a></div><div class='vhub' style='margin-top:10px;'> Call remote</div><hr/><span style="font-weight:bold;">Purpose</span>: Make a remote service call.<br/>
<br/>
<div class='code' style='position:relative;padding-right:16px;'>
<pre id='code_278'>
<span class="Statement"> call-remote</span> <service> [ ,... ] \
[<span class="Type"> status</span> <status> ] \
[<span class="Type"> started</span> <started> ] \
[<span class="Type"> finished-okay</span> <finished okay> ]</pre>
<span id=golf_copied_278 style='position:absolute;right:-14px;top:-30px; cursor: pointer;visibility:hidden;background:white;'>Copied!</span>
<textarea id='golft_278' style='position: absolute;left: -500%;'></textarea>
<img src='https://golf-lang.com/golf-copy-small-1.png' id='golfb' onclick='gg_copy(golft_278, code_278, golf_copied_278)' style='position:absolute;right:0;top:0; cursor: pointer;opacity:0.5;'/>
</div><br/>
call-remote will make service call(s) as described in a single <service> or a list of <service>s. Unless only a single <service> is specified, each call will execute in parallel with others (as multiple threads). call-remote finishes when all <service> calls do. Each <service> must have beed created with <a href='https://golf-lang.com/new-remote.html'>new-remote</a>.<br/>
<br/>
A <service> call is made to a remote service. "Remote service" means a process accepting requests that is not the same process executing call-remote; it may be running on the same or a different computer, or it may be a different process started by the very same application. <br/>
<br/>
<span style="font-weight:bold;">- Multiple service calls in parallel</span><br/>
Executing multiple <service> calls in parallel is possible by specifying a list of <service>s separated by a comma.<br/>
<br/>
There is no limit on how many <service>s you can call at the same time; it is limited only by the underlying Operating System resources, such as threads/processes and sockets.<br/>
<br/>
<span style="font-weight:bold;">- Call status</span><br/>
<status> number (in "status" clause) will be GG_OKAY if all <service> calls have each returned GG_OKAY; this means all have started and all have finished with a valid message from the service; or GG_ERR_FAILED if at least one did not (for example if the service could not be contacted, if there was a network error etc.); or GG_ERR_MEMORY if out of memory; or GG_ERR_TOO_MANY if there is too many calls (more than 1,000,000). <br/>
<br/>
Note that GG_OKAY does not mean that the reply is considered a success in any logical sense; only that the request was made and a reply was received according to the service protocol. <br/>
<br/>
<span style="font-weight:bold;">- Request(s) status</span><br/>
Note that the actual application status for each <service>, as well as data returned and any application errors can be obtained via "handler-status", "data" and "error" clauses of <a href='https://golf-lang.com/read-remote.html'>read-remote</a> statement, respectively.<br/>
<br/>
<span style="font-weight:bold;">- Request(s) duration</span><br/>
call-remote will wait for all <service> requests to finish. For that reason, it is a good idea to specify "timeout" clause in <a href='https://golf-lang.com/new-remote.html'>new-remote</a> for each <service> used, in order to limit the time you would wait. Use <a href='https://golf-lang.com/read-remote.html'>read-remote</a> to detect a timeout, in which case "handler-status" clause would produce GG_CLI_ERR_TIMEOUT.<br/>
<br/>
<span style="font-weight:bold;">- How many calls started and finished</span><br/>
<started> (in "started" clause) will be the number of service calls that have started. <finished okay> (in "finished-okay" clause) is the number of calls that have finished with return value of GG_OKAY as described above. By using <status>, <started> and <finished okay> you may surmise whether the results of call-remote meet your expectations.<br/>
<br/>
<span style="font-weight:bold;">- Performance, security</span><br/>
call-remote is faster than <a href='https://golf-lang.com/call-web.html'>call-web</a> because it does not use HTTP protocol; rather it only uses small and binary protocol, which is extremenly fast, especially when using Unix sockets on the same machine (see <a href='https://golf-lang.com/new-remote.html'>new-remote</a>). Note that the binary protocol does not have any inherent security built-in; that is part of the reason why it is fast. As such, it is very well suited for remote service calls on the same machine or between networked machines on a secure network. <br/>
<div class="vsub"><a id="Examples"></a>Examples</div>
This example will connect to local Unix socket file "/var/lib/gg/app_name/sock/sock" (a Golf application named "app_name"), and make a request named "server" (i.e. it will be processed by source code file "server.golf") with URL path of "/op=add/key=2" (meaning with input parameters "op=add" and "key=2"). Then, service reply is read and displayed.<br/>
<div class='code' style='position:relative;padding-right:16px;'>
<pre id='code_279'>
<span class="Comment">// Create single call</span>
<span class="Statement"> new-remote</span> srv<span class="Identifier"> location</span> <span class="Constant">"/var/lib/gg/app_name/sock/sock"</span> \
<span class="Identifier"> method</span> <span class="Constant">"GET"</span><span class="Identifier"> app-path</span> <span class="Constant">"/app_name"</span><span class="Identifier"> request-path</span> <span class="Constant">"/server"</span> \
<span class="Identifier"> url-params</span> <span class="Constant">"/op=add/key=2"</span>
<span class="Comment">// Call single service call</span>
<span class="Statement"> call-remote</span> srv<span class="Type"> finished-okay</span> sfok
<span class="Comment">// Get results of a remote service call</span>
<span class="Statement"> read-remote</span> srv<span class="Type"> data</span> rdata
<span class="Comment">// Display results</span>
<span class="Statement"> @</span>Data from service is <span class="Statement"><<p-out</span> rdata<span class="Statement">>></span></pre>
<span id=golf_copied_279 style='position:absolute;right:-14px;top:-30px; cursor: pointer;visibility:hidden;background:white;'>Copied!</span>
<textarea id='golft_279' style='position: absolute;left: -500%;'></textarea>
<img src='https://golf-lang.com/golf-copy-small-1.png' id='golfb' onclick='gg_copy(golft_279, code_279, golf_copied_279)' style='position:absolute;right:0;top:0; cursor: pointer;opacity:0.5;'/>
</div><br/>
If you are connecting to a service via TCP (and not with a Unix socket like in the example above), the "location" clause in <a href='https://golf-lang.com/new-remote.html'>new-remote</a> might be:<br/>
<div class='code' style='position:relative;padding-right:16px;'>
<pre id='code_280'>
<span class="Statement"> new-remote</span> srv<span class="Identifier"> location</span> <span class="Constant">"192.168.0.28:2400"</span> \
<span class="Identifier"> method</span> <span class="Constant">"GET"</span><span class="Identifier"> app-path</span> <span class="Constant">"/app_name"</span><span class="Identifier"> request-path</span> <span class="Constant">"/server"</span> \
<span class="Identifier"> url-params</span> <span class="Constant">"/op=add/key=2"</span></pre>
<span id=golf_copied_280 style='position:absolute;right:-14px;top:-30px; cursor: pointer;visibility:hidden;background:white;'>Copied!</span>
<textarea id='golft_280' style='position: absolute;left: -500%;'></textarea>
<img src='https://golf-lang.com/golf-copy-small-1.png' id='golfb' onclick='gg_copy(golft_280, code_280, golf_copied_280)' style='position:absolute;right:0;top:0; cursor: pointer;opacity:0.5;'/>
</div><br/>
In this case, you are connecting to another service (running on IP "192.168.0.28") on port 2400. See <a href='https://golf-lang.com/mgrg.html'>mgrg</a> on how to start a service that listens on a TCP port. You would likely use TCP connectivity only if a service you're connecting to is on a different computer.<br/>
<br/>
See also <a href='https://golf-lang.com/new-remote.html'>new-remote</a>.<br/>
<div class="vsub"><a id="See also"></a>See also</div>
<a name='Distributed computing'></a><span style="font-weight:bold;">Distributed computing</span><br/>
<a href='https://golf-lang.com/call-remote.html'>call-remote</a> <br/>
<a href='https://golf-lang.com/new-remote.html'>new-remote</a> <br/>
<a href='https://golf-lang.com/read-remote.html'>read-remote</a> <br/>
<a href='https://golf-lang.com/run-remote.html'>run-remote</a> <br/>
<span style="font-weight:bold;">See all</span> <br/>
<a href='https://golf-lang.com/documentation.html'>documentation</a><br/>
<!--ENDVDOC90-->
<br/><div style='width:100%;clear:both;'>
<hr/>
<!--GOLFFOOT77--><span style='font-size:80%'><a href="https://golf-lang.com/copyright.html">Copyright</a> (c) 2019-2025 Gliim LLC. All contents on this web site is "AS IS" without warranties or guarantees of any kind.</span>
</div><br/></body></html>