Best way to implement handling of read timeouts of socket connections in asynchronous way using C++ and...
There are thousands of clients hitting my server (A) over TCP/IP, I then need to modify the data received and send it across to another server (B), and then get the response and send it back to the client, or handle read timeouts.
Right now a worker thread at server A picks the data from socket send the data to server B over TCP/IP, and in case the server B is slow my server's threads are stuck waiting. Its completely synchronous.
In short I want to implement asynchronous handling of read timeouts or socket read. So the threads can go back to pool after sending data to server B, and in case server B becomes slow server A is still serving requests.
I understand we can achieve using poll, select system calls, but what should be the best way/practice to achieve it. (I cannot use boost)
c++ multithreading sockets select client-server
add a comment |
There are thousands of clients hitting my server (A) over TCP/IP, I then need to modify the data received and send it across to another server (B), and then get the response and send it back to the client, or handle read timeouts.
Right now a worker thread at server A picks the data from socket send the data to server B over TCP/IP, and in case the server B is slow my server's threads are stuck waiting. Its completely synchronous.
In short I want to implement asynchronous handling of read timeouts or socket read. So the threads can go back to pool after sending data to server B, and in case server B becomes slow server A is still serving requests.
I understand we can achieve using poll, select system calls, but what should be the best way/practice to achieve it. (I cannot use boost)
c++ multithreading sockets select client-server
add a comment |
There are thousands of clients hitting my server (A) over TCP/IP, I then need to modify the data received and send it across to another server (B), and then get the response and send it back to the client, or handle read timeouts.
Right now a worker thread at server A picks the data from socket send the data to server B over TCP/IP, and in case the server B is slow my server's threads are stuck waiting. Its completely synchronous.
In short I want to implement asynchronous handling of read timeouts or socket read. So the threads can go back to pool after sending data to server B, and in case server B becomes slow server A is still serving requests.
I understand we can achieve using poll, select system calls, but what should be the best way/practice to achieve it. (I cannot use boost)
c++ multithreading sockets select client-server
There are thousands of clients hitting my server (A) over TCP/IP, I then need to modify the data received and send it across to another server (B), and then get the response and send it back to the client, or handle read timeouts.
Right now a worker thread at server A picks the data from socket send the data to server B over TCP/IP, and in case the server B is slow my server's threads are stuck waiting. Its completely synchronous.
In short I want to implement asynchronous handling of read timeouts or socket read. So the threads can go back to pool after sending data to server B, and in case server B becomes slow server A is still serving requests.
I understand we can achieve using poll, select system calls, but what should be the best way/practice to achieve it. (I cannot use boost)
c++ multithreading sockets select client-server
c++ multithreading sockets select client-server
asked Nov 14 '18 at 10:11
YogeshYogesh
319113
319113
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You need to use non-blocking sockets with an event loop library, such as boost::asio, libevent, libuv. Or, reinvent your own wheel.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53297680%2fbest-way-to-implement-handling-of-read-timeouts-of-socket-connections-in-asynchr%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need to use non-blocking sockets with an event loop library, such as boost::asio, libevent, libuv. Or, reinvent your own wheel.
add a comment |
You need to use non-blocking sockets with an event loop library, such as boost::asio, libevent, libuv. Or, reinvent your own wheel.
add a comment |
You need to use non-blocking sockets with an event loop library, such as boost::asio, libevent, libuv. Or, reinvent your own wheel.
You need to use non-blocking sockets with an event loop library, such as boost::asio, libevent, libuv. Or, reinvent your own wheel.
edited Nov 14 '18 at 11:52
answered Nov 14 '18 at 11:46
Maxim EgorushkinMaxim Egorushkin
87.2k11102185
87.2k11102185
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53297680%2fbest-way-to-implement-handling-of-read-timeouts-of-socket-connections-in-asynchr%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown