09-07-2016
Writing a REST server to run on FreeBSD -- how to structure for concurrency?
Hi All,
I want to write a domain specific REST/HTTP server to run on FreeBSD. I have control over both the server side and the
primary client intended to consume the service.
My question is:
how do you think it should be designed to support multiple connections, given:
- It will run on a modern x86 chip (I7 6700K) which has 4 cores, each running two threads.
- REST transactions are short-lived, request/response, which are basically HTTP requests (GET, POST, DELETE).
Is fork() too costly for each connection?
Is kqueue the wrong tool, given that the connections are not really long-lived and do not consist of repeated updates/polling?
Should I use a thread approach where I have the master, and then create a new thread for each connection and then terminate the thread after the response is sent back?
I am really at a loss as to what the most effective approach to take is. While it may never be used, I'd at least like to design it to be efficient and capable of supporting as many concurrent connections as possible!
Thanks for any suggestions.
(
I want to write it for multiple reasons: to learn, to challenge myself, to build something minimalistic, because the sun rises, etc. I realize I could just grab and go with an existing web server but I don't want to do that.)
Last edited by rbatte1; 09-14-2016 at 06:10 AM..
Reason: Converted to formatted number-list
10 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Ok, I've been shopping around and I've seen some nice one's, but they are either too expensive or they are not 64-bit; I want to be prepared for the future at the right price (under $3,000 with a decent configuration)! :D
Where can I find a good 64-bit desktop or workstation that will run the... (0 Replies)
Discussion started by: Mr. Nice Guy
0 Replies
2. Shell Programming and Scripting
Hi All,
I am new user of shell scripting has come up with a problem. that I have a directory structure like :
Home
|
|--------A
| |----trunk
| |-------A_0_1/
| |
| |-------A_0_2/
|
|--------B
| ... (6 Replies)
Discussion started by: bhaskar_m
6 Replies
3. Shell Programming and Scripting
Hi,
I have a directory structure like the one given below
root\a\b1
root\a\b2
root\b\b1
root\b\b2
.
.
.
root\j\b1
root\j\b2
Now, there are a txt files in each dir and subdir, there is a root.txt
I have to write a script where in i have to run a command called "genrb <filename>"... (6 Replies)
Discussion started by: vikramsinghnegi
6 Replies
4. UNIX for Advanced & Expert Users
The reason I ask is because the einstein client in the freash ports is not the current one with boinc. No new work is being assigned. They sugested or asked if I could run boinc 6.10.17 linux in emulation and if so, I would be able to crunch einstein data.
so, anyone done the linux emulation of... (0 Replies)
Discussion started by: droolin
0 Replies
5. Shell Programming and Scripting
Hi,
I am a novice and require help once again.
I have a over 200 file all called index.jsp placed in different directories
The following Sed command gives me the data of all included jsp files in index.jsp
sed -n -e 's/^.*page="\(*\).*$/\1/p' index.jsp
How can I run the above... (6 Replies)
Discussion started by: rajkdutta
6 Replies
6. Shell Programming and Scripting
Hello All,
I have got a dev server and a production server will call it as D server and P server.
I have a dir structure in my D server and i need to create the same dir structure in P server also using a shell script.
If i do a find . in my D server, i am getting an o/p like :-
.
./vio... (9 Replies)
Discussion started by: Renjesh
9 Replies
7. UNIX for Dummies Questions & Answers
Hi All,
I want to copy the dir/subdir structure from SERVER-A to SERVER-B without copying all the files in each dir.
Is it possible using SCP / SFTP command?
For example,
SERVER-A has following two dir/subdirectories and files under each subdir.
... (1 Reply)
Discussion started by: Hangman2
1 Replies
8. Shell Programming and Scripting
I have a script called script.sh that has the following in it.
cat /home/auto/script.sh
#!/bin/bash
ARGA=$1
if ; then
echo "${ARGA}:Confirmed"
else
echo "${ARGA}:Unconfirmed"
fi
I need a way to run this script, and then, after script has confirmed the... (9 Replies)
Discussion started by: SkySmart
9 Replies
9. Shell Programming and Scripting
Hi,
Brand new to these forums, and I hope that someone can help me out.
I'm trying to run the following command in UNIX
java -jar GenomeAnalysisTK.jar -T SplitSamFile -dt NONE -R reference.fa -I my.bam --outputRoot /my/path/SampleFiles/Sample_
It executes the SplitSamFile from GATK, but I... (3 Replies)
Discussion started by: Wixaros
3 Replies
10. Shell Programming and Scripting
Hello gurus,
I produce a number of .loc files in parallel depending on number of .csv in the folder
for file in *csv
do
./process.sh $file > $file.loc &
done
then I want to compile all the output from the previous step into a single masterlocfile and then perform the rest of the steps... (2 Replies)
Discussion started by: senhia83
2 Replies
LEARN ABOUT MOJAVE
curlopt_http_version
CURLOPT_HTTP_VERSION(3) curl_easy_setopt options CURLOPT_HTTP_VERSION(3)
NAME
CURLOPT_HTTP_VERSION - specify HTTP protocol version to use
SYNOPSIS
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
DESCRIPTION
Pass version a long, set to one of the values described below. They ask libcurl to use the specific HTTP versions. This is not sensible to
do unless you have a good reason. You have to set this option if you want to use libcurl's HTTP/2 support.
Note that the HTTP version is just a request. libcurl will still prioritize to re-use an existing connection so it might then re-use a con-
nection using a HTTP version you haven't asked for.
CURL_HTTP_VERSION_NONE
We don't care about what version the library uses. libcurl will use whatever it thinks fit.
CURL_HTTP_VERSION_1_0
Enforce HTTP 1.0 requests.
CURL_HTTP_VERSION_1_1
Enforce HTTP 1.1 requests.
CURL_HTTP_VERSION_2_0
Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the server. (Added in 7.33.0)
The alias CURL_HTTP_VERSION_2 was added in 7.43.0 to better reflect the actual protocol name.
CURL_HTTP_VERSION_2TLS
Attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the HTTPS server. For
clear text HTTP servers, libcurl will use 1.1. (Added in 7.47.0)
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge that the server supports HTTP/2
straight away. HTTPS requests will still do HTTP/2 the standard way with negotiated protocol version in the TLS handshake. (Added in
7.49.0)
DEFAULT
CURL_HTTP_VERSION_NONE
PROTOCOLS
HTTP
EXAMPLE
TODO
AVAILABILITY
Along with HTTP
RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
SEE ALSO
CURLOPT_SSLVERSION(3), CURLOPT_HTTP200ALIASES(3),
libcurl 7.54.0 May 01, 2016 CURLOPT_HTTP_VERSION(3)