b***i 发帖数: 3043 | 1 我的项目的具体设计是一个嵌入式的服务器用Linux, C++11, ASIO, JSON等
客户端向服务器请求connect
连接后,服务器向客户端发送一个问题,
客户端回答
服务器回答对了
客户端开始发送JSON
服务器解析后进行动作,然后发送返回的信息
问题在最后一行:如果这个动作需要时间,我这些动作要在handle_read里面进行,还
是另起一个线程?我在进行这些动作的时候是否可以锁定信号灯?或者是比较简单的
lock?比如我要写一个变量,但是多个server可能同时访问这个变量,所以要lock再写。
目前采用boost的一个例子:
void start_read() {
// Set a deadline for the read operation.
input_deadline_.expires_from_now(readTimeout_);
// Start an asynchronous operation to read a newline-delimited message.
asio::async_read_until(socket_, input_buffer_, endChar, std::bind(&TCP_
Session::handle_read, shared_from_this(), std::placeholders::_1));
//asio::async_read(socket_, input_buffer_, asio::transfer_all(), std::
bind(&TCP_Session::handle_read, shared_from_this(), std::placeholders::_1));
}
如果是同步的,我大可以做这些事情。我初学ASIO,感觉不应该可以在异步里面使用信
号灯等技术,就像在paint里面做这些一样,会不会死机啊?这个handle_read最后是怎
么被呼叫的? 是操作系统生成一个新线程来回叫还是在统一的回叫,还是只有一个统
一的单线程? | b***i 发帖数: 3043 | 2 稍微想了一下,是不是io_service::run那里就在等着系统提供一个事件,然后它就呼
叫handle_read, 什么的,这样的话就好理解了。我做一点Lock也是可以的。反正我自
己是起一个线程才运行run的。
写。
【在 b***i 的大作中提到】 : 我的项目的具体设计是一个嵌入式的服务器用Linux, C++11, ASIO, JSON等 : 客户端向服务器请求connect : 连接后,服务器向客户端发送一个问题, : 客户端回答 : 服务器回答对了 : 客户端开始发送JSON : 服务器解析后进行动作,然后发送返回的信息 : 问题在最后一行:如果这个动作需要时间,我这些动作要在handle_read里面进行,还 : 是另起一个线程?我在进行这些动作的时候是否可以锁定信号灯?或者是比较简单的 : lock?比如我要写一个变量,但是多个server可能同时访问这个变量,所以要lock再写。
|
|