-
-
Notifications
You must be signed in to change notification settings - Fork 718
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tck socket stream 的一个问题(协程相关) #80
Labels
Milestone
Comments
目前不支持一个socket,跨多个协程内进行io读写,只能在一个协程里面操作(我这边一般不这么做,而且为了效率,socket跟协程有cache优化,是n:1绑定的,多个协程来回操作同一个socket会有问题),目前请尽量避免这么做。。 上面的代码有以下问题:
例如: void hand_stream(tb_cpointer_t priv)
{
tb_stream_ref_t stream = tb_stream_init_from_sock("127.0.0.1", 9001, TB_SOCKET_TYPE_TCP, tb_false);
if (tb_stream_open(stream))
{
int32_t data;
tb_bool_t ok = tb_stream_bread(stream, (tb_byte_t*)&data,4);
tb_stream_close(stream);
}
} 一个协程就能搞定,为什么要在两个协程内操作呢, 即使处于代码封装目的,直接同一协程内进行函数调用就行了,没必要再开个协程进行read操作,例如 void hand_read(tb_stream_ref_t stream)
{
int32_t data;
tb_bool_t ok = tb_stream_bread(stream, (tb_byte_t*)&data,4);
}
void hand_open(tb_cpointer_t priv)
{
tb_stream_ref_t stream = tb_stream_init_from_sock("127.0.0.1", 9001, TB_SOCKET_TYPE_TCP, tb_false);
if (tb_stream_open(stream))
{
hand_read(stream);
tb_stream_close(stream);
}
} |
多个协程同时操作socket,我之后会做支持,不过可能需要等上一段时间了。。 |
收到, 多谢. 期待 v1.6.4 |
我dev上已经支持了,你可以试试。。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
代码大概如下:
报错
我跟踪了下, 原因可能是:
针对socket stream (tcp linux):
调用 tb_co_scheduler_io_wait 时候, 会判断当前 coroutine
是否有该socket , 如果已经在epoll 中,就先删除. 如果没有, 就add.
这个时候是不是应该判断 socket fd 是否在epoll 中. (因为当前
协程没有,其它协程可能已经把socke fd放到epoll 中了)
The text was updated successfully, but these errors were encountered: