diff options
| author | ruki <[email protected]> | 2019-11-28 22:34:52 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-11-28 09:29:14 +0800 |
| commit | 5419b4eb3112fbe9b43249c62f9e319518caa71e (patch) | |
| tree | 19c84c95aa945d37cfb05393b2e9f25681ebc837 | |
| parent | 6cde799f0a1ebb3151e0880299a0dce75567f764 (diff) | |
add sched_tcp/echo tests
| -rw-r--r-- | tests/modules/socket/sched_tcp/echo_client.lua | 28 | ||||
| -rw-r--r-- | tests/modules/socket/sched_tcp/echo_server.lua | 40 | ||||
| -rw-r--r-- | xmake/core/base/scheduler.lua | 13 |
3 files changed, 71 insertions, 10 deletions
diff --git a/tests/modules/socket/sched_tcp/echo_client.lua b/tests/modules/socket/sched_tcp/echo_client.lua new file mode 100644 index 000000000..50e8c6dcd --- /dev/null +++ b/tests/modules/socket/sched_tcp/echo_client.lua @@ -0,0 +1,28 @@ +import("core.base.socket") +import("core.base.scheduler") + +function _session(addr, port) + print("connect %s:%d ..", addr, port) + local sock = socket.connect(addr, port) + print("%s: connected!", sock) + local count = 0 + while count < 10000 do + local send = sock:send("hello world..", {block = true}) + if send > 0 then + sock:recv(13, {block = true}) + else + break + end + count = count + 1 + end + print("%s: send ok, count: %d!", sock, count) + sock:close() +end + +function main(count) + count = count and tonumber(count) or 1 + for i = 1, count do + scheduler.run(_session, "127.0.0.1", 9001) + end + scheduler.runloop() +end diff --git a/tests/modules/socket/sched_tcp/echo_server.lua b/tests/modules/socket/sched_tcp/echo_server.lua new file mode 100644 index 000000000..4ae2119cc --- /dev/null +++ b/tests/modules/socket/sched_tcp/echo_server.lua @@ -0,0 +1,40 @@ +import("core.base.socket") +import("core.base.scheduler") + +function _session(sock) + local count = 0 + local result = nil + while true do + local recv, data = sock:recv(13, {block = true}) + if recv > 0 then + result = data + sock:send(data, {block = true}) + count = count + 1 + else + break + end + end + print("%s: recv: %d, count: %d", sock, result and result:size() or 0, count) + result:dump() + sock:close() +end + +function _listen(addr, port) + + local sock = socket.bind(addr, port) + sock:listen(20) + print("%s: listening %s:%d ..", sock, addr, port) + while true do + local sock_client = sock:accept() + if sock_client then + print("%s: accepted", sock_client) + scheduler.run(_session, sock_client) + end + end + sock:close() +end + +function main() + scheduler.run(_listen, "127.0.0.1", 9001) + scheduler.runloop() +end diff --git a/xmake/core/base/scheduler.lua b/xmake/core/base/scheduler.lua index 1d46850bf..426523a68 100644 --- a/xmake/core/base/scheduler.lua +++ b/xmake/core/base/scheduler.lua @@ -27,16 +27,9 @@ local option = require("base/option") local string = require("base/string") local coroutine = require("base/coroutine") --- TODO --- the socket loop coroutine -function scheduler:_co_loop_socket() - print("socket loop") -end - --- TODO --- the process loop coroutine -function scheduler:_co_loop_process() - print("process loop") +-- TODO we need support socket/pipe io and processes as same time +function scheduler:_co_poller_loop() + print("poller loop") end -- get all ready coroutines |
