- 主题:求推荐好用的轻量级http server
如果用thrift,没多少需要处理的,最大缺点boost挺讨厌的。
如果httpserver,libevent简单列子比下面的thrift代码还少,还简结,话说,既然httpserver,为啥用C++
#include <thrift/concurrency/ThreadManager.h>
#include <concurrency/PosixThreadFactory.h>
#include <thrift/protocol/TCompactProtocol.h>
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TBufferTransports.h>
#include <server/TNonblockingServer.h>
#include "MessageService.h"
class MessageServiceHandler : virtual public MessageServiceIf {
public:
MessageServiceHandler() {
printf("start\n");
}
void processRequest(MessageServiceReturn &_return, const MessageServiceRequest &requst) {
printf("todo:\n");
}
};
using boost::shared_ptr;
int main(int argc, char **argv) {
using namespace apache::thrift::transport;
using namespace apache::thrift::server;
using namespace apache::thrift::protocol;
using namespace apache::thrift::concurrency;
int port = 9090;
int threadNum = 8;
shared_ptr<MessageServiceHandler> handler(new MessageServiceHandler());
shared_ptr<TProcessor> processor(new MessageServiceProcessor(handler));
TServerSocket *socket = new TServerSocket(port);
shared_ptr<TServerTransport> serverTransport(socket);// timeout no set
shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
socket->setAcceptTimeout(20 * 1000);
socket->setSendTimeout(240 * 1000);
socket->setRecvTimeout(120 * 1000);
boost::shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(
threadNum);
boost::shared_ptr<ThreadFactory> threadFactory(new PosixThreadFactory());
threadManager->threadFactory(threadFactory);
threadManager->start();
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TNonblockingServer server(processor, protocolFactory, port, threadManager);
int nIOThreads = 32;
server.setNumIOThreads(nIOThreads);
server.serve();
return 0;
}
--
修改:lushan5436 FROM 114.247.175.*
FROM 114.247.175.*
现在市面上这些 rpc 都太难用了。我做的 rpc 同样实现一个服务器:
// server.cpp
#include "lafrpc.h"
using namespace lafrpc;
class Hello: public QObject
{
Q_OBJECT
public slots:
QString sayHello(const QString &name) { return QStringLiteral("Hello, %1").arg(name); }
};
int main(int argc, char **argv)
{
auto rpc = RpcBuilder(MessagePack).create();
QSharedPointer<Hello> hello(new Hello());
rpc->registerInstance(hello, "demo");
rpc->startServer("tcp://127.0.0.1:8002", true);
return 0;
}
#include "server.moc"
【 在 lushan5436 (密如) 的大作中提到: 】
: 如果用thrift,没多少需要处理的。如果httpserver,libevent简单列子比下面的thrift代码还少
: #include<sys/socket.h>
: #include <thrift/concurrency/ThreadManager.h>
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
客户端代码:
// client.cpp
#include "lafrpc.h"
using namespace lafrpc;
int main(int argc, char **argv)
{
auto rpc = RpcBuilder(MessagePack).create();
QSharedPointer<Peer> peer = rpc->connect("tcp://127.0.0.1:8002");
if (peer.isNull()) {
qDebug() << "can not connect to peer.";
return 2;
}
QString result = peer->call("demo.sayHello", "Goldfish").toString();
qDebug() << result;
return 0;
}
客户端很简单,就是用 MessagePack 序列化一下请求,发送给服务端。服务端使用 qt 的反射来调用 Hello::sayHello(). 很易用,只是速度就不那么快了,而且对于复杂类型,序列化也会麻烦些。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 现在市面上这些 rpc 都太难用了。我做的 rpc 同样实现一个服务器:
: // server.cpp
: #include "lafrpc.h"
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
Qt太大了呀——可能说错了:
The most up-to-date qtcore4.dll file is a 32bit that has a file size of approx 1.87 MB uncompressed and 0.76 MB after compressing to zip.
--
修改:billybear04 FROM 106.121.141.*
FROM 106.121.141.*
大家的建议都好多啊,多谢了。
目前暂时是先用http-lib了
【 在 lushan5436 (密如) 的大作中提到: 】
: 如果用thrift,没多少需要处理的,最大缺点boost挺讨厌的。
: 如果httpserver,libevent简单列子比下面的thrift代码还少,还简结,话说,既然httpserver,为啥用C++
: #include <thrift/concurrency/ThreadManager.h>
: ...................
--
FROM 123.118.110.205
你的信息过时了,现在变得更大。5.12.6 版本的 QtCore5.dll 未压缩时是 4.6M,压缩后是 1.6M
不过我觉得引入这个容量好处实在太多了。把 boost 的精华都搞过来了。
【 在 billybear04 (billybear04) 的大作中提到: 】
: Qt太大了呀——可能说错了:
: The most up-to-date qtcore4.dll file is a 32bit that has a file size of approx 1.87 MB uncompressed and 0.76 MB after compressing to zip.
--
FROM 112.47.122.*
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 你的信息过时了,现在变得更大。5.12.6 版本的 QtCore5.dll 未压缩时是 4.6M,压缩后是 1.6M
: 不过我觉得引入这个容量好处实在太多了。把 boost 的精华都搞过来了。
"现在变得更大"——笑点低真好,我笑了半天:-)
--
FROM 106.121.141.*
哈哈哈哈哈哈。。。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 你的信息过时了,现在变得更大。5.12.6 版本的 QtCore5.dll 未压缩时是 4.6M,压缩后是 1.6M
: 不过我觉得引入这个容量好处实在太多了。把 boost 的精华都搞过来了。
--
FROM 114.84.111.*
强推
https://github.com/an-tao/drogon目前在所有 web framework 性能测试中排名第一,力压 rust、go 各种框架
【 在 blueboats 的大作中提到: 】
: 主要是为了在内部的几个不同语言写的代码块之间实现跨语言调用,调用的接口比较简单、也不需要很复杂的功能比如认证啊,https啊,高并发啊之类的。
: 所以想找一个比较轻量级的,接入比较简明的http server实现,求推荐一个。
--
FROM 125.33.125.*
现在宣传不是不能说“第一”嘛。。
看了一下实现原理,确实比其他语言的框架快一点也是可能的。但加上数据库连接、业务逻辑、模板引擎等等以后,其实也很难有实质性的提升。
api设计和文档的质量看着还是不错的。
【 在 GAE (行军司马懿) 的大作中提到: 】
: 强推
https://github.com/an-tao/drogon: 目前在所有 web framework 性能测试中排名第一,力压 rust、go 各种框架
--
FROM 114.84.111.*