cppcms-users Mailing List for CppCMS C++ Web Framework (Page 22)
Brought to you by:
artyom-beilis
You can subscribe to this list here.
2009 |
Jan
|
Feb
(22) |
Mar
|
Apr
(3) |
May
|
Jun
(4) |
Jul
|
Aug
|
Sep
|
Oct
(15) |
Nov
(16) |
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
(4) |
Feb
|
Mar
(8) |
Apr
(8) |
May
(8) |
Jun
(36) |
Jul
(63) |
Aug
(126) |
Sep
(47) |
Oct
(66) |
Nov
(46) |
Dec
(42) |
2011 |
Jan
(87) |
Feb
(24) |
Mar
(54) |
Apr
(21) |
May
(22) |
Jun
(18) |
Jul
(22) |
Aug
(101) |
Sep
(57) |
Oct
(33) |
Nov
(34) |
Dec
(66) |
2012 |
Jan
(64) |
Feb
(76) |
Mar
(73) |
Apr
(105) |
May
(93) |
Jun
(83) |
Jul
(84) |
Aug
(88) |
Sep
(57) |
Oct
(59) |
Nov
(35) |
Dec
(49) |
2013 |
Jan
(67) |
Feb
(17) |
Mar
(49) |
Apr
(64) |
May
(87) |
Jun
(64) |
Jul
(93) |
Aug
(23) |
Sep
(15) |
Oct
(16) |
Nov
(62) |
Dec
(73) |
2014 |
Jan
(5) |
Feb
(23) |
Mar
(21) |
Apr
(11) |
May
(1) |
Jun
(19) |
Jul
(27) |
Aug
(16) |
Sep
(5) |
Oct
(37) |
Nov
(12) |
Dec
(9) |
2015 |
Jan
(7) |
Feb
(7) |
Mar
(44) |
Apr
(28) |
May
(5) |
Jun
(12) |
Jul
(8) |
Aug
|
Sep
(39) |
Oct
(34) |
Nov
(30) |
Dec
(34) |
2016 |
Jan
(66) |
Feb
(23) |
Mar
(33) |
Apr
(15) |
May
(11) |
Jun
(15) |
Jul
(26) |
Aug
(4) |
Sep
(1) |
Oct
(30) |
Nov
(10) |
Dec
|
2017 |
Jan
(52) |
Feb
(9) |
Mar
(24) |
Apr
(16) |
May
(9) |
Jun
(12) |
Jul
(33) |
Aug
(8) |
Sep
|
Oct
(1) |
Nov
(2) |
Dec
(6) |
2018 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
(14) |
Jun
(1) |
Jul
(9) |
Aug
(1) |
Sep
(13) |
Oct
(8) |
Nov
(2) |
Dec
(2) |
2019 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
(3) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2020 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(9) |
Jul
(6) |
Aug
(25) |
Sep
(10) |
Oct
(10) |
Nov
(6) |
Dec
|
2021 |
Jan
|
Feb
|
Mar
(7) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(9) |
Oct
(1) |
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Artyom B. <art...@gm...> - 2016-01-15 17:43:18
|
> > Thanks, that seems to really address the heart of the issue. > > Just for clarification: async_on_peer_reset isn't automagically tracking > the client timeout and performing some cleanup? I think that was the > fundamental assumption that I had that went wrong. I expected that in > this code: > > void listen() > { > booster::shared_ptr<cppcms::http::context> context = > release_context(); > waiters_.insert(context); > context->async_on_peer_reset( > std::bind( > &chat::remove_context, > this, > context)); > } > > the callback passed into async_on_peer_reset would get called on client > timeout. The documentation here: > http://cppcms.com/cppcms_ref/latest/classcppcms_1_1http_1_1context.html# > a0f6fe53deabd90fee0ced81a8df6404e > seems to indicate that that is a valid expectation. > Yes and not: if client closes the connection it is reported over TCP/IP to the server and thus server can detect it and fire async_on_peer_reset. There are two problems: (a) if client does not cooperate and just gone - SO_KEEPALIVE timeout settings of TCP/IP should be quite tight to detect an issue (b) The server should report it to the FastCGI/SCGI application - and it is actually the major problem. Most of the servers I tested didn't do it reliably or did it on FastCGI but not SCGI or other way around. Bottom line it shouldn't be considered reliable. It works well with cooperative client with CppCMS's web server or web servers that handle connections properly. Artyom P.S.: I was sure that I published a blog article regarding this but I'm mistaken. So I probably need to write about it - how to detect a client that gone. |
From: Cody S. <cod...@gu...> - 2016-01-15 16:54:57
|
Artyom Beilis <artyom.beilis@...> writes: > > The problem is that detecting that the connection isn't alive isn't reliable. > > Especially when working via webserver and fastcgi/scgi. > > You always need to have timeouts on connections especially long- polling > ones. > > For example if you know that client resubmits request every 10 seconds > (also I'd suggest > to increase it) put your own 10 seconds timeout as well as you know that the > client will disconnect so why to keep one alive. > > Always manage timeouts on asynchronous requests. > > Artyo > > > > > The problem arises in an ajax function called "listen()", which makes an > > ajax POST request to the server and waits until the server has responded > > or 10 seconds have passed, at which point it will fire up another "long- > > polling" request. However, each of these requests remains open in the > > case that they time out, and then the lighttpd server refuses any more > > connections after too many requests have been issued. I'm not sure what > > I'm doing wrong with my long-polling approach, but for some reason, > > these sockets are not getting closed and I've been unable to determine > > why after 2 days of investigating. > > > > Thanks, that seems to really address the heart of the issue. Just for clarification: async_on_peer_reset isn't automagically tracking the client timeout and performing some cleanup? I think that was the fundamental assumption that I had that went wrong. I expected that in this code: void listen() { booster::shared_ptr<cppcms::http::context> context = release_context(); waiters_.insert(context); context->async_on_peer_reset( std::bind( &chat::remove_context, this, context)); } the callback passed into async_on_peer_reset would get called on client timeout. The documentation here: http://cppcms.com/cppcms_ref/latest/classcppcms_1_1http_1_1context.html# a0f6fe53deabd90fee0ced81a8df6404e seems to indicate that that is a valid expectation. P.S. Sorry for blowing up the thread above with repeat submissions; I thought gmane may have dropped my post. I'll be more patient this time ;) Also, thanks for the framework and all your hard work; I'm having a great time jumping into web dev. and C++ with your tool! |
From: Artyom B. <art...@gm...> - 2016-01-15 16:53:58
|
On Fri, Jan 15, 2016 at 11:50 AM, mawan sugiyanto <ma...@gm...> wrote: > Dear All > > I run cppcms as fastcgi in apache. So, where is shoud put media file like > css, js, others? are these files folow document root of apache or still like > as independent web server? > You use Apache or whatever server to handle static files - they most likely would do it much better than internal file server also you'll not have overhead of all layers. So Always use web server to handle static files in combination of web-server->fastcgi/scgi->cppcms Artyom |
From: Artyom B. <art...@gm...> - 2016-01-15 16:52:01
|
I have several things to comment 1. Boost.Asio or Lib-event are networking libraries and not full stack web frameworks - and it can make significant difference. What your code does per request? 2. How do you have written CppCMS application, synchronous, asynchronous etc. For example for sync-application each requests gets to the thread pool which has major overhead but has an advantage for real world CPU intense applications, if it is asyncrhonous application do you use non-blocking api of CppCMS 1.1 or not? 3. How does the client work, for example does it accepts gzip compression. CppCMS compresses the output for synchronous applications by default. 4. How much "real-application" is there? Is there anything useful that application does? So more information needed. Also what version of CppCMS do you use. CppCMS 1.1 has some major performance improvements. It is interesting and I'd be glad to search and fix bottlenecks but I really need some more details. Best, Artyom On Fri, Jan 15, 2016 at 8:19 AM, 陈抒 <csf...@gm...> wrote: > the table shows not correctly in previous email, I upload the screenshot > here. > > cpu,mem and request/sec have three number: min, max and average. > > [image: Inline image 2] > > our hardware information: > > > [image: Inline image 3] > > > > > > Dean Chen > Best regards > http://blog.csdn.net/csfreebird > > On Fri, Jan 15, 2016 at 2:13 PM, 陈抒 <csf...@gm...> wrote: > >> Compare with other languages, c++ cppcms is faster. But my team did >> benchmark a few months ago, we found the qps of mudoo is best, libevent is >> much faster than boost asio and cppcms. We use two client servers to send >> requests to one target server which runs four rest server based on mudoo, >> libevent, boost:asio and cppcms one by one. >> >> Below is our benchmark resutl. >> >> Table 5: more details httpserver all versions >> benchmarkServerCompilerOptimization >> optionCpuMemDiskNetcard(in/out)Requests/seccppcms_basedclang++ 3.6.2-O3228% >> / 239% / 228%9356 / 9416 / 9416--14252 / 16124 / 15820asio_basedclang++ >> 3.6.2-O3300% / 305% / 303%4368 / 4564 /4416--33069 / 34247 / >> 33360libevent_basedclang++ 3.6.2-O3763% / 764% / 764%5560 / 10M / >> 5520--113373 / 114072 / 113713muduo_basedclang++ 3.6.2-O3650% / 694% / >> 658%6272 / 6324 / 6312--303202 / 307204 / 305839 >> We are not professional benchmark team, Artyom, you can do this yourself >> to make sure our conclusion is correct. We can provide our rest server code >> implemented by above four c++ framworks if you needed. >> >> Hope cppcms becomes faster and faster in the future. We really love it >> when developing web site. LibEvent's performance is good, but we only use >> it to build rest server instead of web site because the code style is too >> low level and ugly. >> >> >> >> Dean Chen >> Best regards >> http://blog.csdn.net/csfreebird >> >> On Thu, Dec 31, 2015 at 11:48 PM, CN <cn...@fa...> wrote: >> >>> On Thu, Dec 24, 2015, at 06:20 PM, Artyom Beilis wrote: >>> >>> I want you guys to looking on it - try to build the version from trunk, >>> try new API *and report your impressions*. >>> >>> >>> Hi! Artyom, >>> >>> It's very nice to know CppCMS is under active development :-) >>> >>> I have just switched to application_specific_pool and have not >>> encountered any issue with this new API *during last 10 minutes* :-) >>> >>> Meanwhile, I want to take this chance to show off my modifications to my >>> local version of rpc_json.cpp as follows: >>> >>> * Comment out line 162: >>> BOOSTER_DEBUG("cppcms") << "JSON-RPC Method call:" << method(); >>> >>> * Change line 181 from >>> return_error("Invalid parameters"); >>> to >>> return_error("Invalid parameters passed to JSON RPC method >>> \""+method()+"\""); >>> >>> * Change line 191 from >>> return_error("Internal Service Error"); >>> to >>> return_error("Invalid JSON RPC method: "+method()); >>> >>> CppCMS rocks! Simply can not find a single reason not using this superb >>> product and learning much C++ skills from it. >>> >>> Happy new year! >>> CN >>> >>> -- http://www.fastmail.com - Email service worth paying for. Try it for free >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Cppcms-users mailing list >>> Cpp...@li... >>> https://lists.sourceforge.net/lists/listinfo/cppcms-users >>> >>> >> > > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > > |
From: Artyom B. <art...@gm...> - 2016-01-15 16:36:35
|
The problem is that detecting that the connection isn't alive isn't reliable. Especially when working via webserver and fastcgi/scgi. You always need to have timeouts on connections especially long-polling ones. For example if you know that client resubmits request every 10 seconds (also I'd suggest to increase it) put your own 10 seconds timeout as well as you know that the client will disconnect so why to keep one alive. Always manage timeouts on asynchronous requests. Artyo > > The problem arises in an ajax function called "listen()", which makes an > ajax POST request to the server and waits until the server has responded > or 10 seconds have passed, at which point it will fire up another "long- > polling" request. However, each of these requests remains open in the > case that they time out, and then the lighttpd server refuses any more > connections after too many requests have been issued. I'm not sure what > I'm doing wrong with my long-polling approach, but for some reason, > these sockets are not getting closed and I've been unable to determine > why after 2 days of investigating. > > |
From: Cody S. <cod...@gu...> - 2016-01-15 16:00:15
|
>>Cody Sheffler <cody.sheffler@...> writes: >> >> >> Hi all, >> >> I'm just starting to get my hands dirty with cppcms and long-polling, >> and I'm having some troubles. I've followed the example provided in the >> "chat" application of the examples directory and made some tweaks (code >> will be provided below). >> >> The problem arises in an ajax function called "listen()", which makes an >> ajax POST request to the server and waits until the server has responded >> or 10 seconds have passed, at which point it will fire up another "long- >> polling" request. However, each of these requests remains open in the >> case that they time out, and then the lighttpd server refuses any more >> connections after too many requests have been issued. I'm not sure what >> I'm doing wrong with my long-polling approach, but for some reason, >> these sockets are not getting closed and I've been unable to determine >> why after 2 days of investigating. >> >> Here is the client code (using jQuery): >> >> function listen(){ >> $.ajax({ >> url: "/chat/listen", >> timeout: 10000, // 10 seconds >> type: "GET", >> dataType: "json", >> success: function(r, st, xhr){ >> console.log(r); >> listen(); >> }, >> error: function(xhr, st, e){ >> if(st !== "timeout"){ >> return alert("error in listen(): " + st); >> } >> listen(); // If we timed out, fire another long poll >> } >> }); >> } >> >> $(function(){ >> listen(); >> }) >> >> And here is the server code: >> >> std::set<booster::shared_ptr<cppcms::http::context> > waiters_; >> >> ... >> >> void remove_context(booster::shared_ptr<cppcms::http::context> >> context) >> { >> >> waiters_.erase(context); >> } >> >> void listen() >> { >> booster::shared_ptr<cppcms::http::context> context = >> release_context(); >> waiters_.insert(context); >> context->async_on_peer_reset( >> std::bind( >> &chat::remove_context, >> this, >> context)); >> } >> >> After running the application for a few minutes, I run `sudo lsof -n | >> grep lighttpd` and the printout indicates that each request that has >> timed out has a corresponding socket that is hung in the CLOSE_WAIT >> state and remains that way until I bring the lighttpd server down and >> back up again. >> >> Any insight you can offer regarding this issue would be greatly >> appreciated. Please let me know if I should provide any more >> information; I have the lighttpd and cppcms configuration files on hand, >> as well as the rest of the client and server code, I just didn't want to >> have too much noise in this post. redred77 <redred77@...> writes: > > > Maybe you can reuse socket connection which is on CLOSE_WAIT state by changing linux system conf. I don't remember the actual command but you will easily find it from Google. > Well I'm not sure whether this is the right solution but I experienced problem when linux system took too long wait time on CLOSE_WAIT and it caused blocking new socket connection. I hope it helps. Thanks for the reply, redred! I don't want to poke around in the linux system config unless someone can tell me with confidence that that's where the issue lies. I feel like I should be able to handle this from either the client or the server application. Is there some cleanup I'm forgetting to perform in the server or client code I've posted? Or is cppcms not built to support long-polling? I apologize for my lack of expertise on this matter; I'm new to the nuances of the network stack. |
From: Cody S. <cod...@gu...> - 2016-01-15 15:57:47
|
>>Cody Sheffler <cody.sheffler@...> writes: >> >> >> Hi all, >> >> I'm just starting to get my hands dirty with cppcms and long-polling, >> and I'm having some troubles. I've followed the example provided in the >> "chat" application of the examples directory and made some tweaks (code >> will be provided below). >> >> The problem arises in an ajax function called "listen()", which makes an >> ajax POST request to the server and waits until the server has responded >> or 10 seconds have passed, at which point it will fire up another "long- >> polling" request. However, each of these requests remains open in the >> case that they time out, and then the lighttpd server refuses any more >> connections after too many requests have been issued. I'm not sure what >> I'm doing wrong with my long-polling approach, but for some reason, >> these sockets are not getting closed and I've been unable to determine >> why after 2 days of investigating. >> >> Here is the client code (using jQuery): >> >> function listen(){ >> $.ajax({ >> url: "/chat/listen", >> timeout: 10000, // 10 seconds >> type: "GET", >> dataType: "json", >> success: function(r, st, xhr){ >> console.log(r); >> listen(); >> }, >> error: function(xhr, st, e){ >> if(st !== "timeout"){ >> return alert("error in listen(): " + st); >> } >> listen(); // If we timed out, fire another long poll >> } >> }); >> } >> >> $(function(){ >> listen(); >> }) >> >> And here is the server code: >> >> std::set<booster::shared_ptr<cppcms::http::context> > waiters_; >> >> ... >> >> void remove_context(booster::shared_ptr<cppcms::http::context> >> context) >> { >> >> waiters_.erase(context); >> } >> >> void listen() >> { >> booster::shared_ptr<cppcms::http::context> context = >> release_context(); >> waiters_.insert(context); >> context->async_on_peer_reset( >> std::bind( >> &chat::remove_context, >> this, >> context)); >> } >> >> After running the application for a few minutes, I run `sudo lsof -n | >> grep lighttpd` and the printout indicates that each request that has >> timed out has a corresponding socket that is hung in the CLOSE_WAIT >> state and remains that way until I bring the lighttpd server down and >> back up again. >> >> Any insight you can offer regarding this issue would be greatly >> appreciated. Please let me know if I should provide any more >> information; I have the lighttpd and cppcms configuration files on hand, >> as well as the rest of the client and server code, I just didn't want to >> have too much noise in this post. redred77 <redred77@...> writes: > > > Maybe you can reuse socket connection which is on CLOSE_WAIT state by changing linux system conf. I don't remember the actual command but you will easily find it from Google. > Well I'm not sure whether this is the right solution but I experienced problem when linux system took too long wait time on CLOSE_WAIT and it caused blocking new socket connection. I hope it helps. Thanks for the reply, redred! I don't want to poke around in the linux system config unless someone can tell me with confidence that that's where the issue lies. I feel like I should be able to handle this from either the client or the server application. Is there some cleanup I'm forgetting to perform in the server or client code I've posted? Or is cppcms not built to support long-polling? I apologize for my lack of expertise on this matter; I'm new to the nuances of the network stack. |
From: Cody S. <cod...@gu...> - 2016-01-15 15:04:49
|
>>Cody Sheffler <cody.sheffler@...> writes: >> >> >> Hi all, >> >> I'm just starting to get my hands dirty with cppcms and long-polling, >> and I'm having some troubles. I've followed the example provided in the >> "chat" application of the examples directory and made some tweaks (code >> will be provided below). >> >> The problem arises in an ajax function called "listen()", which makes an >> ajax POST request to the server and waits until the server has responded >> or 10 seconds have passed, at which point it will fire up another "long- >> polling" request. However, each of these requests remains open in the >> case that they time out, and then the lighttpd server refuses any more >> connections after too many requests have been issued. I'm not sure what >> I'm doing wrong with my long-polling approach, but for some reason, >> these sockets are not getting closed and I've been unable to determine >> why after 2 days of investigating. >> >> Here is the client code (using jQuery): >> >> function listen(){ >> $.ajax({ >> url: "/chat/listen", >> timeout: 10000, // 10 seconds >> type: "GET", >> dataType: "json", >> success: function(r, st, xhr){ >> console.log(r); >> listen(); >> }, >> error: function(xhr, st, e){ >> if(st !== "timeout"){ >> return alert("error in listen(): " + st); >> } >> listen(); // If we timed out, fire another long poll >> } >> }); >> } >> >> $(function(){ >> listen(); >> }) >> >> And here is the server code: >> >> std::set<booster::shared_ptr<cppcms::http::context> > waiters_; >> >> ... >> >> void remove_context(booster::shared_ptr<cppcms::http::context> >> context) >> { >> >> waiters_.erase(context); >> } >> >> void listen() >> { >> booster::shared_ptr<cppcms::http::context> context = >> release_context(); >> waiters_.insert(context); >> context->async_on_peer_reset( >> std::bind( >> &chat::remove_context, >> this, >> context)); >> } >> >> After running the application for a few minutes, I run `sudo lsof -n | >> grep lighttpd` and the printout indicates that each request that has >> timed out has a corresponding socket that is hung in the CLOSE_WAIT >> state and remains that way until I bring the lighttpd server down and >> back up again. >> >> Any insight you can offer regarding this issue would be greatly >> appreciated. Please let me know if I should provide any more >> information; I have the lighttpd and cppcms configuration files on hand, >> as well as the rest of the client and server code, I just didn't want to >> have too much noise in this post. redred77 <redred77@...> writes: > > > Maybe you can reuse socket connection which is on CLOSE_WAIT state by changing linux system conf. I don't remember the actual command but you will easily find it from Google. > Well I'm not sure whether this is the right solution but I experienced problem when linux system took too long wait time on CLOSE_WAIT and it caused blocking new socket connection. I hope it helps. Thanks for the reply, redred! I don't want to poke around in the linux system config unless someone can tell me with confidence that that's where the issue lies. I feel like I should be able to handle this from either the client or the server application. Is there some cleanup I'm forgetting to perform in the server or client code I've posted? Or is cppcms not built to support long-polling? I apologize for my lack of expertise on this matter; I'm new to the nuances of the network stack. |
From: mawan s. <ma...@gm...> - 2016-01-15 09:51:17
|
Dear All I run cppcms as fastcgi in apache. So, where is shoud put media file like css, js, others? are these files folow document root of apache or still like as independent web server? This is my configuration "file_server" : { "enable" : true, "listing" : true, "document_root" : "../", //"document_root" : "/var/www", "alias" : [ { "url" : "/media" , "path" : "/opt/app/bin/ncrmdata/media" }, ], }, Apache document root in /opt/local/apache2 Thanks Mawan |
From: 陈抒 <csf...@gm...> - 2016-01-15 06:20:15
|
the table shows not correctly in previous email, I upload the screenshot here. cpu,mem and request/sec have three number: min, max and average. [image: Inline image 2] our hardware information: [image: Inline image 3] Dean Chen Best regards http://blog.csdn.net/csfreebird On Fri, Jan 15, 2016 at 2:13 PM, 陈抒 <csf...@gm...> wrote: > Compare with other languages, c++ cppcms is faster. But my team did > benchmark a few months ago, we found the qps of mudoo is best, libevent is > much faster than boost asio and cppcms. We use two client servers to send > requests to one target server which runs four rest server based on mudoo, > libevent, boost:asio and cppcms one by one. > > Below is our benchmark resutl. > > Table 5: more details httpserver all versions > benchmarkServerCompilerOptimization > optionCpuMemDiskNetcard(in/out)Requests/seccppcms_basedclang++ 3.6.2-O3228% > / 239% / 228%9356 / 9416 / 9416--14252 / 16124 / 15820asio_basedclang++ > 3.6.2-O3300% / 305% / 303%4368 / 4564 /4416--33069 / 34247 / > 33360libevent_basedclang++ 3.6.2-O3763% / 764% / 764%5560 / 10M / > 5520--113373 / 114072 / 113713muduo_basedclang++ 3.6.2-O3650% / 694% / > 658%6272 / 6324 / 6312--303202 / 307204 / 305839 > We are not professional benchmark team, Artyom, you can do this yourself > to make sure our conclusion is correct. We can provide our rest server code > implemented by above four c++ framworks if you needed. > > Hope cppcms becomes faster and faster in the future. We really love it > when developing web site. LibEvent's performance is good, but we only use > it to build rest server instead of web site because the code style is too > low level and ugly. > > > > Dean Chen > Best regards > http://blog.csdn.net/csfreebird > > On Thu, Dec 31, 2015 at 11:48 PM, CN <cn...@fa...> wrote: > >> On Thu, Dec 24, 2015, at 06:20 PM, Artyom Beilis wrote: >> >> I want you guys to looking on it - try to build the version from trunk, >> try new API *and report your impressions*. >> >> >> Hi! Artyom, >> >> It's very nice to know CppCMS is under active development :-) >> >> I have just switched to application_specific_pool and have not >> encountered any issue with this new API *during last 10 minutes* :-) >> >> Meanwhile, I want to take this chance to show off my modifications to my >> local version of rpc_json.cpp as follows: >> >> * Comment out line 162: >> BOOSTER_DEBUG("cppcms") << "JSON-RPC Method call:" << method(); >> >> * Change line 181 from >> return_error("Invalid parameters"); >> to >> return_error("Invalid parameters passed to JSON RPC method >> \""+method()+"\""); >> >> * Change line 191 from >> return_error("Internal Service Error"); >> to >> return_error("Invalid JSON RPC method: "+method()); >> >> CppCMS rocks! Simply can not find a single reason not using this superb >> product and learning much C++ skills from it. >> >> Happy new year! >> CN >> >> -- http://www.fastmail.com - Email service worth paying for. Try it for free >> >> >> >> ------------------------------------------------------------------------------ >> >> _______________________________________________ >> Cppcms-users mailing list >> Cpp...@li... >> https://lists.sourceforge.net/lists/listinfo/cppcms-users >> >> > |
From: 陈抒 <csf...@gm...> - 2016-01-15 06:14:04
|
Compare with other languages, c++ cppcms is faster. But my team did benchmark a few months ago, we found the qps of mudoo is best, libevent is much faster than boost asio and cppcms. We use two client servers to send requests to one target server which runs four rest server based on mudoo, libevent, boost:asio and cppcms one by one. Below is our benchmark resutl. Table 5: more details httpserver all versions benchmarkServerCompilerOptimization optionCpuMemDiskNetcard(in/out)Requests/seccppcms_basedclang++ 3.6.2-O3228% / 239% / 228%9356 / 9416 / 9416--14252 / 16124 / 15820asio_basedclang++ 3.6.2-O3300% / 305% / 303%4368 / 4564 /4416--33069 / 34247 / 33360libevent_basedclang++ 3.6.2-O3763% / 764% / 764%5560 / 10M / 5520--113373 / 114072 / 113713muduo_basedclang++ 3.6.2-O3650% / 694% / 658%6272 / 6324 / 6312--303202 / 307204 / 305839 We are not professional benchmark team, Artyom, you can do this yourself to make sure our conclusion is correct. We can provide our rest server code implemented by above four c++ framworks if you needed. Hope cppcms becomes faster and faster in the future. We really love it when developing web site. LibEvent's performance is good, but we only use it to build rest server instead of web site because the code style is too low level and ugly. Dean Chen Best regards http://blog.csdn.net/csfreebird On Thu, Dec 31, 2015 at 11:48 PM, CN <cn...@fa...> wrote: > On Thu, Dec 24, 2015, at 06:20 PM, Artyom Beilis wrote: > > I want you guys to looking on it - try to build the version from trunk, > try new API *and report your impressions*. > > > Hi! Artyom, > > It's very nice to know CppCMS is under active development :-) > > I have just switched to application_specific_pool and have not encountered > any issue with this new API *during last 10 minutes* :-) > > Meanwhile, I want to take this chance to show off my modifications to my > local version of rpc_json.cpp as follows: > > * Comment out line 162: > BOOSTER_DEBUG("cppcms") << "JSON-RPC Method call:" << method(); > > * Change line 181 from > return_error("Invalid parameters"); > to > return_error("Invalid parameters passed to JSON RPC method > \""+method()+"\""); > > * Change line 191 from > return_error("Internal Service Error"); > to > return_error("Invalid JSON RPC method: "+method()); > > CppCMS rocks! Simply can not find a single reason not using this superb > product and learning much C++ skills from it. > > Happy new year! > CN > > -- http://www.fastmail.com - Email service worth paying for. Try it for free > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > > |
From: redred77 <red...@gm...> - 2016-01-15 00:01:06
|
Maybe you can reuse socket connection which is on CLOSE_WAIT state by changing linux system conf. I don't remember the actual command but you will easily find it from Google. Well I'm not sure whether this is the right solution but I experienced problem when linux system took too long wait time on CLOSE_WAIT and it caused blocking new socket connection. I hope it helps. |
From: Cody S. <cod...@gu...> - 2016-01-14 23:20:13
|
Hi all, I'm just starting to get my hands dirty with cppcms and long-polling, and I'm having some troubles. I've followed the example provided in the "chat" application of the examples directory and made some tweaks (code will be provided below). The problem arises in an ajax function called "listen()", which makes an ajax POST request to the server and waits until the server has responded or 10 seconds have passed, at which point it will fire up another "long- polling" request. However, each of these requests remains open in the case that they time out, and then the lighttpd server refuses any more connections after too many requests have been issued. I'm not sure what I'm doing wrong with my long-polling approach, but for some reason, these sockets are not getting closed and I've been unable to determine why after 2 days of investigating. Here is the client code (using jQuery): function listen(){ $.ajax({ url: "/chat/listen", timeout: 10000, // 10 seconds type: "GET", dataType: "json", success: function(r, st, xhr){ console.log(r); listen(); }, error: function(xhr, st, e){ if(st !== "timeout"){ return alert("error in listen(): " + st); } listen(); // If we timed out, fire another long poll } }); } $(function(){ listen(); }) And here is the server code: std::set<booster::shared_ptr<cppcms::http::context> > waiters_; ... void remove_context(booster::shared_ptr<cppcms::http::context> context) { waiters_.erase(context); } void listen() { booster::shared_ptr<cppcms::http::context> context = release_context(); waiters_.insert(context); context->async_on_peer_reset( std::bind( &chat::remove_context, this, context)); } After running the application for a few minutes, I run `sudo lsof -n | grep lighttpd` and the printout indicates that each request that has timed out has a corresponding socket that is hung in the CLOSE_WAIT state and remains that way until I bring the lighttpd server down and back up again. Any insight you can offer regarding this issue would be greatly appreciated. Please let me know if I should provide any more information; I have the lighttpd and cppcms configuration files on hand, as well as the rest of the client and server code, I just didn't want to have too much noise in this post. |
From: mawan s. <ma...@gm...> - 2016-01-14 10:36:27
|
Thankyou Artyom I just follow this configuration from cppcms tutorial http://cppcms.com/wikipp/en/page/cppcms_1x_tut_web_server_config#Apache..FastCGI but it is solved by reinstalling cppdb. but i don't what is the problem. now it is running properly. i think that cppdb lib is not configured properly. Thankyou. On Thu, Jan 14, 2016 at 5:28 PM, Artyom Beilis <art...@gm...> wrote: > In order to be able to get a help for such a question you need to at > least provide some decent details for example: > > 1. How do you run your application > 2. What web server do you use > 3. How have you configured your web server. > 4. Configuration file you are using with cppcms. > 5. Location of your files, etc > 6. How libcppcms is installed and how do you link with it. > > Given all that other users can help you, otherwise it is case just > guessing in best > case or not getting answer at all. > > Artyom > > On Thu, Jan 14, 2016 at 11:53 AM, mawan sugiyanto <ma...@gm...> > wrote: > > Dear All > > > > I run cppcms application as fascgi service. I have found error > > > > dyld: Library not loaded: libcppdb.0.dylib > > Referenced from: /opt/app/bin/ncrm > > Reason: image not found > > > > but it is running normal as http service. when i run as fascgi, error as > > mentioned above. > > > > what is wrong from my configuration? where shoud i put skin library when > i > > run as fastcgi? > > > > > > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > |
From: Artyom B. <art...@gm...> - 2016-01-14 10:28:13
|
In order to be able to get a help for such a question you need to at least provide some decent details for example: 1. How do you run your application 2. What web server do you use 3. How have you configured your web server. 4. Configuration file you are using with cppcms. 5. Location of your files, etc 6. How libcppcms is installed and how do you link with it. Given all that other users can help you, otherwise it is case just guessing in best case or not getting answer at all. Artyom On Thu, Jan 14, 2016 at 11:53 AM, mawan sugiyanto <ma...@gm...> wrote: > Dear All > > I run cppcms application as fascgi service. I have found error > > dyld: Library not loaded: libcppdb.0.dylib > Referenced from: /opt/app/bin/ncrm > Reason: image not found > > but it is running normal as http service. when i run as fascgi, error as > mentioned above. > > what is wrong from my configuration? where shoud i put skin library when i > run as fastcgi? > > |
From: mawan s. <ma...@gm...> - 2016-01-14 09:54:35
|
Dear All I run cppcms application as fascgi service. I have found error dyld: Library not loaded: libcppdb.0.dylib Referenced from: /opt/app/bin/ncrm Reason: image not found but it is running normal as http service. when i run as fascgi, error as mentioned above. what is wrong from my configuration? where shoud i put skin library when i run as fastcgi? Thanks .. Mawan |
From: Artyom B. <art...@gm...> - 2016-01-12 14:30:37
|
> > In my big cppcms based application I have a custom session_storage and > run into the problem > that I need to access a shared resource (singleton class) of the > process in the loaded so/dll. > To solve this I made use of shared-memory to store the address of that > shared object and access > that information in my session_storage. > > Maybe there is a good way to extend the API to be able to pass a void > pointer to shared_pool, extend the sessions_generator entry point and pass the custom void pointer to > the entry_point. > >From what I can see your session storage is implemented in SO/DLL... and you try to access a class in main process. Am I right? I have two suggestions for you: 1. Don't load it from shared object/dll but rather use it directly via installing it via storage member function cppcms::session_pool (accessible via cppcms::service) This is possible the most obvious solution I can think of. 2. if you want to keep it as shared object you can open it manually via booster::shared_object and get your own signature you want and than install it into session_pool your DLL/SO extern "C" session_storage *my_generator(my_signeton &) { ... } // main APP booster::shared_object ob("libmystorage.so"); { extern "C" session_storage (*gen)(my_signeton &) ob.symbol(gen,"my_generator") cppcms::service srv(argc,argv); std::auto_ptr<session_storage> st(gen(my_singleton::instance()); srv.session_pool().storage(st); } 3 Also in cppcms 1.1 you have new plugin API (not finalied yet) in typesafe manner So you can do stuff like this: { using cppcms::session::session_storage using cppcms::plugin::manager; cppcms::service srv(argc,argv); { booster::callback(session_storage *(my_signelton &)> gen = manager().instance().entry<session_storage*(my_signelton &)>("session","generator"); std::auto_ptr<session_storage> st(gen(my_singleton::instance()); srv.session_pool().storage(st); } ... } while your function declared in SO/DLL as namespace session { session_storage *generator(my_signeton &) { ... } CPPCMS_PLUGIN_ENTRY(session,generator,session_storage*(my_signelton &)); } > What is the deadline for the API freeze. I can come up with an RFC > patch for discussion. > The API would be frozen at first RC think it would take at least a month. > greets > -- > Christian Gmeiner, MSc > > https://soundcloud.com/christian-gmeiner > Artyom Beilis |
From: Christian G. <chr...@gm...> - 2016-01-12 12:12:36
|
Hi 2015-12-26 20:12 GMT+01:00 Artyom Beilis <art...@gm...>: > Hello Dear CppCMS Users, > > If someone getting this as duplicate my apologize. > (Apparently GMail does not like my Yahoo mail sent via mailman :-) ) > > -------------------- > > I'm getting ready to release next CppCMS beta version 1.1 (that would > become stable as 1.2) > Great to hear! > Some preview of the work that was done so far: > > http://cppcms.com/wikipp/en/page/cppcms_1_2_whats_new > > In the nutshell > > - Redesigned applications pool and its API. > - New non-blocking I/O mode for asynchronous applications. > - On-the-fly uploads/post content processing support. > - Independent of context use of cache and session interfaces > - Support of non-cookies based session handling > - Integration of session handling with 3rd part technologies: > PHP, Java Servlet, Aps.Net and so on and contributed modules. > http://blog.cppcms.com/post/117 > - Major performance and memory use improvements. > - Headers and Source separation by templates compiler. > (Special thanks to Lee Elenbaas for the major contribution) > > There are still few relatively small tasks in the TODO list before > beta will be officially ready. > > http://cppcms.com/wikipp/en/page/cppcms_1x_tasks#CppCMS.1.1.0.-.Next.Release > > More than that I'm changing the release policy to something that I > should do for a looooong time ago: > > --- release early, release often --- > Superb! > CppCMS 1.1 was for too long in development and it isn't good... > > I want you guys to looking on it: > > - Try to build the version from trunk > - Try new API and report your impressions. > - Ask questions. > > If some API issues are discovered I can make API changes before 1.2 is out. > However once 1.2 is released... the API will be frozen. > In my big cppcms based application I have a custom session_storage and run into the problem that I need to access a shared resource (singleton class) of the process in the loaded so/dll. To solve this I made use of shared-memory to store the address of that shared object and access that information in my session_storage. Maybe there is a good way to extend the API to be able to pass a void pointer to shared_pool, extend the sessions_generator entry point and pass the custom void pointer to the entry_point. What is the deadline for the API freeze. I can come up with an RFC patch for discussion. greets -- Christian Gmeiner, MSc https://soundcloud.com/christian-gmeiner |
From: John S. <joh...@gm...> - 2016-01-10 12:00:37
|
Hi All, Yes! Reading the correct tutorial made everything work. :-) Thank you for your time trying to help me. John On 10 January 2016 at 04:17, Artyom Beilis <art...@gm...> wrote: > You are looking at the tutorial of old CppCMS version 0.0.x that is > deprecated and not supported any more. > > Up to date tutorial for 1.0.x series is: > > http://cppcms.com/wikipp/en/page/cppcms_1x#Tutorials > > Artyom > > On Sun, Jan 10, 2016 at 2:32 AM, John Soares <joh...@gm...> > wrote: > > Hi, > > > > I'm trying to run the code in: > > http://cppcms.com/wikipp/en/page/tut_hello_world_code > > > > but this is what I've got: > > > ---------------------------------------------------------------------------------------------- > > hello.cpp:11:34: error: expected ‘)’ before ‘&’ token > > my_hello_world(worker_thread &worker) : > > ^ > > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > |
From: Artyom B. <art...@gm...> - 2016-01-10 04:17:44
|
You are looking at the tutorial of old CppCMS version 0.0.x that is deprecated and not supported any more. Up to date tutorial for 1.0.x series is: http://cppcms.com/wikipp/en/page/cppcms_1x#Tutorials Artyom On Sun, Jan 10, 2016 at 2:32 AM, John Soares <joh...@gm...> wrote: > Hi, > > I'm trying to run the code in: > http://cppcms.com/wikipp/en/page/tut_hello_world_code > > but this is what I've got: > ---------------------------------------------------------------------------------------------- > hello.cpp:11:34: error: expected ‘)’ before ‘&’ token > my_hello_world(worker_thread &worker) : > ^ |
From: Marcel H. <ke...@co...> - 2016-01-10 01:18:15
|
I don't know why, but worker_thread is just wrong. You can use the examples in the svn folder itself, the hello_world program there just runs fine (where it uses the right one, cppcms::service, instead of worker_thread) Greetings, On 10.01.2016 01:32, John Soares wrote: > Hi, > > I'm trying to run the code > in: http://cppcms.com/wikipp/en/page/tut_hello_world_code > > but this is what I've got: > ---------------------------------------------------------------------------------------------- > hello.cpp:11:34: error: expected ‘)’ before ‘&’ token > my_hello_world(worker_thread &worker) : > ^ > hello.cpp: In function ‘int main(int, char**)’: > hello.cpp:30:9: error: ‘manager’ was not declared in this scope > manager app(argc,argv); > ^ > hello.cpp:30:9: note: suggested alternative: > In file included from hello.cpp:3:0: > /usr/local/include/cppcms/service.h:48:9: note: ‘cppcms::views::manager’ > class manager; > ^ > hello.cpp:30:17: error: expected ‘;’ before ‘app’ > manager app(argc,argv); > ^ > hello.cpp:31:9: error: ‘app’ was not declared in this scope > app.set_worker(new application_factory<my_hello_world>()); > ^ > hello.cpp:31:28: error: expected type-specifier before > ‘application_factory’ > app.set_worker(new application_factory<my_hello_world>()); > ---------------------------------------------------------------------------------------------- > > This is linux mint(Ubuntu like). > > echo $LD_LIBRARY_PATH = > /usr/local/lib/ > > ls /usr/local/lib/ = > libbooster.a libbooster.so.0 libcppcms.a libcppcms.so.1 > python2.7 > libbooster.so libbooster.so.0.0.3 libcppcms.so libcppcms.so.1.0.5 > python3.4 > > ls /usr/local/include/cppcms/ = > application.h config.h forwarder.h > localization.h session_dual.h url_dispatcher.h > applications_pool.h copy_filter.h http_content_type.h mem_bind.h > session_interface.h url_mapper.h > archive_traits.h cppcms_error.h http_context.h > mount_point.h session_pool.h util.h > base64.h crypto.h http_cookie.h rpc_json.h > session_sid.h view.h > base_cache_fwd.h cstdint.h http_file.h > serialization_classes.h session_storage.h views_pool.h > base_content.h defs.h http_request.h > serialization.h steal_buf.h xss.h > base_view.h encoding.h http_response.h service.h > string_key.h > cache_interface.h filters.h json.h > session_api.h thread_pool.h > cache_pool.h form.h locale_fwd.h > session_cookies.h urandom.h > > > I spent 4 hours trying to solve this but tried everything that I could > imagine without any success > > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 > > > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users |
From: Joerg S. <jo...@br...> - 2016-01-10 00:49:59
|
On Sun, Jan 10, 2016 at 12:32:51AM +0000, John Soares wrote: > I'm trying to run the code in: > http://cppcms.com/wikipp/en/page/tut_hello_world_code Yeah, that looks just wrong. Instead of worker_thread, it should be cppcms::service. Joerg |
From: John S. <joh...@gm...> - 2016-01-10 00:32:59
|
Hi, I'm trying to run the code in: http://cppcms.com/wikipp/en/page/tut_hello_world_code but this is what I've got: ---------------------------------------------------------------------------------------------- hello.cpp:11:34: error: expected ‘)’ before ‘&’ token my_hello_world(worker_thread &worker) : ^ hello.cpp: In function ‘int main(int, char**)’: hello.cpp:30:9: error: ‘manager’ was not declared in this scope manager app(argc,argv); ^ hello.cpp:30:9: note: suggested alternative: In file included from hello.cpp:3:0: /usr/local/include/cppcms/service.h:48:9: note: ‘cppcms::views::manager’ class manager; ^ hello.cpp:30:17: error: expected ‘;’ before ‘app’ manager app(argc,argv); ^ hello.cpp:31:9: error: ‘app’ was not declared in this scope app.set_worker(new application_factory<my_hello_world>()); ^ hello.cpp:31:28: error: expected type-specifier before ‘application_factory’ app.set_worker(new application_factory<my_hello_world>()); ---------------------------------------------------------------------------------------------- This is linux mint(Ubuntu like). echo $LD_LIBRARY_PATH = /usr/local/lib/ ls /usr/local/lib/ = libbooster.a libbooster.so.0 libcppcms.a libcppcms.so.1 python2.7 libbooster.so libbooster.so.0.0.3 libcppcms.so libcppcms.so.1.0.5 python3.4 ls /usr/local/include/cppcms/ = application.h config.h forwarder.h localization.h session_dual.h url_dispatcher.h applications_pool.h copy_filter.h http_content_type.h mem_bind.h session_interface.h url_mapper.h archive_traits.h cppcms_error.h http_context.h mount_point.h session_pool.h util.h base64.h crypto.h http_cookie.h rpc_json.h session_sid.h view.h base_cache_fwd.h cstdint.h http_file.h serialization_classes.h session_storage.h views_pool.h base_content.h defs.h http_request.h serialization.h steal_buf.h xss.h base_view.h encoding.h http_response.h service.h string_key.h cache_interface.h filters.h json.h session_api.h thread_pool.h cache_pool.h form.h locale_fwd.h session_cookies.h urandom.h I spent 4 hours trying to solve this but tried everything that I could imagine without any success |
From: Paolo B. <pao...@gm...> - 2016-01-05 10:19:33
|
The final word is of Artyom Beilis of course. But I find this mail exchange quite interesting, even if not cppcms related. On Tue, Jan 5, 2016 at 7:11 PM, Дмитрий Востриков <ds...@gm...> wrote: > Mawan, I think that we should stop discussions on not cppcms related things. > > From my point of view, In general WebView not have apparent security > problems as any technologies that we have today. Mostly, the problem in the > way that we use it. > > With cppcms you can create a mobile backend that will be ready for extremely > higload. > Сppcms has a really nice tools for working with JSON data. It is very > helpfull for mobile development in general. On mobile side you just need to > use $http service (if you use Ionic) without any differences from how you do > it with PHP backend. > > Dmitriy Vostrikov > > 2016-01-05 12:19 GMT+03:00 mawan sugiyanto <ma...@gm...>: >> >> Thankyou .. Dmitry >> >> I use Phonegap that now integrated by ionic framework with ionic with PHP >> as server. Is it secure use webview in mobile application? >> >> >> >> >> On Tue, Jan 5, 2016 at 3:23 PM, Дмитрий Востриков <ds...@gm...> >> wrote: >>> >>> Hi! If you want use just only C++ i advise Qt framework. But cppcms not >>> set any restrictions on what framework you can use on mobile side. For rapid >>> dev solution I'am use Ionic framework that is about hybrid apps. >>> >>> Dmitriy Vostrikov >>> >>> С Уважением, >>> Дмитрий Востриков >>> >>> mawan sugiyanto <ma...@gm...> | Дата: 05 янв. 2016 г. 11:04 | >>> Сообщение: >>> >>> Dear All >>> >>> I want create mobile application and cppcms as a server. Are you know >>> what is C++ mobile application framework? >>> >>> And is it support for cross platform for Android and IOS? >>> >>> Thank you .. >>> >>> >>> Mawan >> >> > > > > -- > С уважением, > Дмитрий Востриков > > ------------------------------------------------------------------------------ > > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > |
From: Дмитрий В. <ds...@gm...> - 2016-01-05 10:11:24
|
Mawan, I think that we should stop discussions on not cppcms related things. >From my point of view, In general WebView not have apparent security problems as any technologies that we have today. Mostly, the problem in the way that we use it. With cppcms you can create a mobile backend that will be ready for extremely higload. Сppcms has a really nice tools for working with JSON data. It is very helpfull for mobile development in general. On mobile side you just need to use $http service (if you use Ionic) without any differences from how you do it with PHP backend. Dmitriy Vostrikov 2016-01-05 12:19 GMT+03:00 mawan sugiyanto <ma...@gm...>: > Thankyou .. Dmitry > > I use Phonegap that now integrated by ionic framework with ionic with PHP > as server. Is it secure use webview in mobile application? > > > > > On Tue, Jan 5, 2016 at 3:23 PM, Дмитрий Востриков <ds...@gm...> > wrote: > >> Hi! If you want use just only C++ i advise Qt framework. But cppcms not >> set any restrictions on what framework you can use on mobile side. For >> rapid dev solution I'am use Ionic framework that is about hybrid apps. >> >> Dmitriy Vostrikov >> >> С Уважением, >> Дмитрий Востриков >> mawan sugiyanto <ma...@gm...> | Дата: 05 янв. 2016 г. 11:04 | >> Сообщение: >> >> Dear All >> >> I want create mobile application and cppcms as a server. Are you know >> what is C++ mobile application framework? >> >> And is it support for cross platform for Android and IOS? >> >> Thank you .. >> >> >> Mawan >> >> > -- С уважением, Дмитрий Востриков |